- High order function
- map(f,Iterable),将f依次作用在Iterable的每个元素然后返回一个Iterator,再用list(map(f,Iterable))进行转换得到一个Iterable的结果;
- reduce(f,Iterable),函数f必须接收两个参数[如f(x,y),x表示之前的累积结果,y表示当前要参与运算的序列中的一个元素],reduce返回一个累积结果;
- filter(f,Iterable),筛选函数,将f依次作用在序列中的每个元素,若结果为true则保留元素,最终得到一个Iterator;
- sorted(Iterable,key=f),排序函数,按照f返回的结果作为key值进行自定义排序返回一个Iterable; sorted(Iterable,key=f,reverse=True)表示进行反向排序。
- 返回函数
- 在函数中定义函数,且外部函数返回所定义的函数,当调用外部函数时,相关变量和参数都保存在返回函数中,且返回函数并没有立刻执行,而是直到调用返回函数时才会执行;
- 每次调用外部函数f都会返回一个新函数g,每个返回的函数即使有传入相同参数,g1!=g2;
- 返回函数中不能引用任何循环变量或者可能会变化的变量。
- 匿名函数
用lambda关键字表示,lambda x: x*x,冒号前面的x为参数,之后的为返回值。
- 装饰器
1.装饰器的作用是为已经存在的对象添加额外的功能,而不改变已有对象本身,如插入日志、性能测试、事务处理、缓存、权限验证等场景;
2. 附上对一个作业题答案的理解:同时支持带参数或者不带参数的log。
import functools def log(params): def decorate(func): @functools.wraps(func)#保证调用时的函数__name__属性不变 def wrapper(*args, **kw): output = '%s %s()' % (params, func.__name__) or ('call %s()' % func.__name__) print(output) return func(*args, **kw) return wrapper if hasattr(text,'__call__'): #说明是无参数版本 func = params params = None return decorate(func) #应该是类似调用deorate()函数,返回一个wrapper;此处若没有前两句,直接return decorate(params),print出的文本是对函数的一个说明 else: return decorate #带参版log,直接返回一个decorate函数 @log #语法糖 def now(): print('I am now!')
- 偏函数
来自functools.partial 用来帮助创建一个偏函数,即把一个函数的某些参数设置默认值。e.g. int2=functools.partial(int,base=2) 把二进制字符串转为整数。