Python学习笔记之【函数式编程】

高阶函数:以函数作参数的函数

def add(x, y, f):
    return f(x) + f(y)

map()函数:接收一个函数f和一个list,将f作用于list的每个元素上,返回一个新的list

def f(x):
    return x*x
print map(f, [1, 2, 3, 4, 5, 6, 7, 8, 9])

reduce()函数:传入f和list,传入的函数f必须接收两个参数,对list的每个元素反复调用f,返回最终结果

def f(x, y):
    return x + y
print  reduce(f, [1, 3, 5, 7, 9])   #相当于求和

filter()函数:接受一个函数f和一个list,过滤掉f作用下为False的元素,返回新的list

def is_odd(x):
    return x % 2 == 1
filter(is_odd, [1, 4, 6, 7, 9, 12, 17])   #过滤掉偶数
def is_not_empty(s):
    return s and len(s.strip()) > 0
filter(is_not_empty, ['test', None, '', 'str', '  ', 'END'])  #过滤空字符串或者None

上面程序中,s.strip(rm)表示删除s字符串开头结尾的rm序列,rm为空时删除空白符(\n \t \r 空格等)

sorted()函数:排序函数,可传入比较函数来进行自定义排序

def reversed_cmp(x, y):
    if x > y:
        return -1
    if x < y:
        return 1
    return 0
print sorted([36, 5, 12, 9, 21], reversed_cmp)   #倒序排列

闭包:内层函数引用了外层函数的变量(参数也算变量),然后返回内层函数的情况。

扫描二维码关注公众号,回复: 2626280 查看本文章
def calc_sum(lst):
    def lazy_sum():
        return sum(lst)
    return lazy_sum
l=[1,2,3,4]
f=calc_sum(l)
print f()

使用闭包要确保引用的局部变量在函数返回后不能改变,否则会导致结果错误

匿名函数:不显式定义的函数

map(lambda x: x * x, [1, 2, 3, 4, 5, 6, 7, 8, 9])     #得到[1, 4, 9, 16, 25, 36, 49, 64, 81]
sorted([1, 3, 9, 5, 0], lambda x,y: -cmp(x,y))        #倒序排列
myabs = lambda x: -x if x < 0 else x 
print myabs(-1)

猜你喜欢

转载自blog.csdn.net/Neonest/article/details/52665339