高阶函数:以函数作参数的函数
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) #倒序排列
闭包:内层函数引用了外层函数的变量(参数也算变量),然后返回内层函数的情况。
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)