一、map/reduce
map
map()
函数接收两个参数,一个是函数,一个是Iterable
,map
将传入的函数依次 作用到序列的每个元素,并把结果作为新的Iterator
返回。
reduce
reduce
把 结果 继续 和序列 的 下一个元素 做 累积计算
str ===> int
filter()
Python内建的 filter()
函数用于过滤序列。
filter():
接收一个函数和一个序列。和map()
不同的是,filter()
把传入的函数依次作用于每个元素,然后 根据返回值是True
还是False,
决定保留还是丢弃该元素。
筛选素数
def _not_divisible(n):
return lambda x: x % n > 0
这是一个筛选函数:_not_divisible函数返回一个【参数为 x , 功能是 判断 x % n 是否 大于 0 】函数
sorted
二、返回函数
当我们调用lazy_sum()
时,每次调用都会返回一个新的函数,即使传入相同的参数:
( f1()
和f2()
的调用结果互不影响。)
(廖雪峰博客:https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/001431835236741e42daf5af6514f1a8917b8aaadff31bf000)
三、匿名函数
四、偏函数
functools.partial
:创建一个偏函数的,可以直接使用下面的代码创建一个新的函数int2
:
functools.partial
的作用就是,把一个函数的某些参数给固定住(也就是设置默认值),返回一个新的函数
五、装饰器(Decorator)
在代码运行期间动态增加功能的方式,称之为“装饰器”(Decorator)。
把@log
放到now()
函数的定义处,相当于执行了语句:
由于log()
是一个decorator,返回一个函数,所以,原来的now()
函数仍然存在,只是现在同名的now
变量指向了新的函数,于是调用now()
将执行新函数,即在log()
函数中返回的wrapper()
函数。
wrapper()
函数的 参数定义是(*args, **kw)
,因此,wrapper()
函数可接受任意参数的调用。在wrapper()
函数内,首先打印日志,再紧接着调用原始函数。
如果 decorator本身需要传入参数,那就需要编写一个返回decorator的高阶函数。
(__name__
已经从原来的'now'
变成了'wrapper')
因为返回的那个wrapper()
函数名字就是'wrapper'
,所以,需要把原始函数的__name__
等属性复制到wrapper()
函数中,否则,有些依赖函数签名的代码执行会出错。
所以,最终写法如下:
decorator本身需要传入参数
笔记摘抄自廖雪峰博客:https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/0014318435599930270c0381a3b44db991cd6d858064ac0000