Funtioncal Programming Tools
builtins
filter(iterable, func):过滤func返回布尔否值元素enumerate(iterable):添加索引迭代zip(*iterables):打包迭代元素map(func, *iterables):func接受各迭代器中元素作为 参数调用(类似zip)iter:两种产生迭代器的模式iter(iterable):返回迭代器iter(callable, sentinel):调用callable直到返回sentinel停止迭代(不包括)- 可用于替代
while循环
- 可用于替代
itertools
itertools:包含为高效循环而创建迭代器的函数
无穷迭代器
count(start, step=1):步长累加cycle(p):循环p中元素repeat(elem, n=None):重复elem
迭代元素处理
accumulate(p, func=None):累加p中元素chain(*iters):链接迭代器chain.from_iterable(iterable):链接可迭代对象中迭代器compress(data, selelctors):根据selectors选取datadropwhile(pred, seq):保留首个满足pred之后所有元素takewhile(pred, seq):保留首个不满足pred之前元素filterfalse(pred, seq):反filtergroupby(iterable, key=None):根据key(v)值分组迭代器islice(seq, start=0, stop=None, step=1):切片starmap(func, seq):迭代对seq中执行func(*elem)tee(iterable, n=2):复制迭代器,默认2个zip_longes(*iters, fillvalue):依最长迭代器zip,较短 循环填充或fillvalue填充
排列组合
product(*iters, repeat=1):笛卡尔积permutations(p, r=None):r长度的排列,缺省全排列combinations(p, r):r长度组合combinations_with_replacement(p,r):可重复组合
functools
functools:包含高阶函数,即参数、返回值为其他函数的函数
函数转换
cmp_to_key(func):将旧式比较函数转换新式key function- 常用在以下函数
key参数中转换旧式比较函数sortedminmaxheapq.nlargestheapq.nsmallestitertools.groupby
- key function:接收参数,返回可以用于排序的值
- 常用在以下函数
partial(func, *args, **kwargs):返回partial对象,其 调用时类似使用args、kwargs调用funcpartial.method(func, *args, **kwargs):适合类命名空间 中函数、描述器update_wrapper(wrapper, wrapped, assigned=WRAPPER_ASSIGNMENTS, udpated=WRAPPER_UPDATES): 更新wrapper函数信息为wrapped函数信息
函数应用
reduce(func, iterable[, initializer]):使用func接受 两个参数,reduce处理iterable
函数装饰器
@lru_cache(maxsize=128, typed=False):缓存函数执行结果- 字典存储缓存:函数固定参数、关键字参数必须可哈希
- 不同参数调用模式(如仅参数顺序不同)可能被视为不同 ,从而产生多个缓存项
- 可以用于方便实现动态规划
@singledispatch:转换函数为单分派范型函数,实现python 的重载(接口多态)- single dispatch:单分派,基于单个参数类型分派的 范型函数分派形式
@wraps(wrapped, assigned=WRAPPER_ASSIGNMENTS, updated=WRAPPER_UPDATES): 等价于partial(update_wrapper, wrapped, assigned, updated)
类装饰器
@total_ordering:根据类中已定义比较方法实现剩余方法- 类必须实现
__eq__、其他富比较方法中任意一种
- 类必须实现
operator
operator:提供与python内置运算符对应的高效率函数
- 为向后兼容,保留双下划线版本函数名(同特殊方法名)
比较运算
lt(a,b)/__lt__(a,b)le(a,b)eq(a,b)ne(a,b)ge(a,b)gt(a,b)
逻辑运算
not(obj)truth(obj):等价于使用bool构造器is_(a,b)is_not(a,b)
数值运算
add(a,b)sub(a,b)mul(a,b)div(a,b)pow(a,b)mod(a,b)floordiv(a,b)truediv(a,b)matmul(a,b)abs(obj)neg(obj)pos(obj)
在位赋值
- 在位运算对可变数据类型才会更新参数,否则只返回结果
iadd(a,b):等价于a += bisub(a,b)imul(a,b)idiv(a,b)ipow(a,b)imod(a,b)ifloordiv(a,b)itruediv(a,b)imatmul(a,b)
位运算
and_(a,b)or_(a,b)xor(a,b)inv(obj)/invert(obj)lshift(a,b)shift(a,b)
在位运算
iand(a,b)ior(a,b)ixor(a,b)
索引
index(a)
序列运算
concat(a,b)contains(a,b)countOf(a,b)delitem(a,b)getitem(a,b)indexOf(a,b)setitem(a,b,c)length_hint(obj, default=0)
访问函数
attrgetter(attr)/attrgetter(*attrs):返回函数,函数 返回值为参数属性attritemgetter(item)/itemgetter(*items):类似methodcaller(name[, args...]):类似
Funtioncal Programming Tools
https://xyy15926.github.io/Python/Py3std/func_programming.html

