最近比较忙, 很久没写博客了, 如今起, 坚定跟上. 此次简单记录python
中的经常使用特殊技巧方法.python
lambda
匿名函数篇函数
lambda c: c>10
def func(c): return c > 10
(lambda *argv: [item for item in argv])(1,2,3,4,5)
(lambda **kargv:[item for item in kargv.items()])(a=1,b=2,c=3)复制代码
lambda
表达式声明的匿名函数, 和常规的def
声明函数具备一样的效果. lambda
多用于函数体简单以及该函数不会被重复调用屡次的状况lambda
能够接受多个参数, 不定参数以及键值对map(func, iter)
函数篇spa
map(ord, '!@#$%^&*()_+')复制代码
map
函数接受一个函数名func
以及一个迭代器iter
map
函数将iter
中的元素依次传入func
中执行, 并返回func
执行后的结果组成的结果集, 该结果集是一个map
类型的迭代器map
函数也能够接受lambda
函数作参数filter(func,iter)
函数篇code
filter(lambda x: x > 64, map(ord, '!@#$%^&*()_+'))复制代码
filter
函数接受参数同map
函数func
用于过滤iter
中的内容, 而map
中的函数用于对iter
中元素作同一处理filter
类型的迭代器reduce(func, iter)
函数篇ip
from functools import reduce
reduce(lambda sum_res, next_res: sum_res + next_res, range(10))复制代码
python3
中reduce
被移到functools
中reduce
可接受的参数同map
函数同样, 不一样的是前者接受的func
必须能够接受两个参数, 第一个参数会自动传入当前iter
的元素结果集, 第二个参数会自动传入iter
的下一个元素. 最后返回iter
中每一个元素按照func
规则做用以后的结果zip(iter01.iter02)
函数篇博客
zip(['a', 'b', 'c', 'd'], {1,2,3})
zip(*zip(['a', 'b', 'c', 'd'], {1, 2, 3}))复制代码
zip
接受多个iter
, 并将iter
按照最少元素的那个对应打包成元组, 返回一个zip
类型的迭代器, 该迭代器中的元素为前边打包完成的元组zip
也支持解包操做, 将打包的迭代器拆分红多个元组列表推导篇string
[i for i in range(10)]
{i:i for i in range(10)}
{i for i in range(10)}
colors=['black','whiite']
sizes={'S','M','L'}
[(color,size) for color in colors for size in sizes]复制代码
生成器表达式篇it
(i for i in range(20))
tuple(i for i in range(20))
list(i for i in range(20))复制代码
for
循环时候才生成组合, 能够减小for
循环的开销