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
选取data
dropwhile(pred, seq)
:保留首个满足pred
之后所有元素takewhile(pred, seq)
:保留首个不满足pred
之前元素filterfalse(pred, seq)
:反filter
groupby(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
参数中转换旧式比较函数sorted
min
max
heapq.nlargest
heapq.nsmallest
itertools.groupby
- key function:接收参数,返回可以用于排序的值
- 常用在以下函数
partial(func, *args, **kwargs)
:返回partial对象,其 调用时类似使用args
、kwargs
调用func
partial.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 += b
isub(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)
:返回函数,函数 返回值为参数属性attr
itemgetter(item)
/itemgetter(*items)
:类似methodcaller(name[, args...])
:类似
Funtioncal Programming Tools
https://xyy15926.github.io/Python/Py3std/func_programming.html