lambda map filter reduce zip 以及列表推导
最近比较忙, 好久没写博客了, 现在起, 坚决跟上. 这次简单记录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)
函数篇
map(ord, '!@#$%^&*()_+')
map
函数接受一个函数名func
以及一个迭代器iter
map
函数将iter
中的元素依次传入func
中执行, 并返回func
执行后的结果组成的结果集, 该结果集是一个map
类型的迭代器map
函数也可以接受lambda
函数做参数
filter(func,iter)
函数篇
filter(lambda x: x > 64, map(ord, '!@#$%^&*()_+'))
filter
函数接受参数同map
函数- 不同的是, 此处的
func
用于过滤iter
中的内容, 而map
中的函数用于对iter
中元素做同一处理 - 返回一个
filter
类型的迭代器
reduce(func, iter)
函数篇
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
也支持解包操作, 将打包的迭代器拆分成多个元组
列表推导篇
[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]
- 列表推导, 可用于快速生成可读性高的列表, 字典以及集合
- 一次性生成多个元素的列表, 字典或者集合类型
- 便捷的生成笛卡尔积
生成器表达式篇
(i for i in range(20)) tuple(i for i in range(20)) list(i for i in range(20))
- 生成器表达式语法和列表推导类似, 只是将方括号变为圆括号
- 生成器表达式可以逐个产出元素, 而不是先建立一个完整的列表再把该列表传递到某个构造函数中去
- 生成器表达式仅仅在
for
循环时候才生成组合, 可以减少for
循环的开销
相关推荐
meylovezn 2020-09-21
mmmjyjy 2020-07-16
typhoonpython 2020-06-11
x青年欢乐多 2020-06-06
Stranger 2020-05-16
PythonMaker 2020-04-22
QianYanDai 2020-04-18
千锋 2020-04-11
SDUTACM 2020-03-05
fly00love 2020-03-05
f = lambda x, y, z: x + y + z # returns a function that can optionally be assigned a name. def func:
sschencn 2020-02-21
wklken的笔记 2020-01-30
GhostLWB 2020-01-30
sulindong0 2020-01-19
chinademon 2020-01-12
mieleizhi0 2020-01-11