一、高阶函数
函数是可以赋值给变量的,而函数是可以接受变量的,所以函数可以接受函数。这样的函数就叫高阶函数。
1: map函数
map是将函数作用于可迭代对象Iterable,然后生成迭代器Iterator。
def f(x):
return x * x
r = map(f,[1,2,3,4,5,6])
print(list(r))
print(next(r))
print(next(r))
print(next(r))
2: reduce函数
定义:将函数作用于两个参数后,再将结果作用于第三个参数。
例:将一列数字变成一个整数
from functools import reduce
def fn(x,y):
return x*10+y
print(reduce(fn,[1,2,3,4,5,7]))
3: filter(过滤器)
定义:将函数作用为参数后根据返回的值是flase还是ture,是flase就丢弃。
删掉空字符串
def not_empty(s):
return s and s.strip()
list(filter(not_empty,['1','a','None','v',' ']))
结果:['1','a','v']
4: sorted(排序)
利用sorted函数对列表进行排序
示例:sorted([列表1],函数 )
sorted([36, 5, -12, 9, -21],key=abs)
结果:[5, 9, -12, -21, 36]
按忽略大小排序
sorted(['bob', 'about', 'Zoo', 'Credit'], key=str.lower)
['about', 'bob', 'Credit', 'Zoo']
二、返回函数
函数可以作为参数做一些高阶的用法,还可以作为结果返回,下次调用。
def lazy_sum(*args):
def sum1(): #1:sum函数(内函数)引用了lazy_sum(外函数)的参数和局部变量
ax = 0
for n in args:
ax =ax + n
return ax
return sum1 #2:当外函数返回sum时发现,卧槽我还有参数和变量会在sum函数中用到,
#所以就酱参数和变量给sum然后自己返回,这种叫闭包。
a = lazy_sum(1,2,3,4) #传入参数时要定义一个变量,因为每次返回的值不一样。
print(a())
三、匿名函数
匿名函数不需要先定义函数名,可以直接传入,返回的值就是表达式的结果
a = list(map(lambda x: x + x,[1,2,3,4,5]))
print(a)
四、装饰器
def now():
print('2015_03_25')
f = now
拿到f函数的名字
print(f.name)