[笔记] Python 与函数式编程
Last updated: 2019/05/27 Published at: 2019/05/27
匿名函数定义
1lambda argument1, argument2 ,... argument3 : expression
用法示例
- 类似函数
1>> up = lambda s : s.upper()
2>> up("you")
3YOU
- 列表生成式
1>> [(lambda x: x**2)(x) for x in range(10)]
2[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
- 用作参数
1#将列表按照元组的第二个值进行排序
2>> l = [(1, 20), (3, 0), (9, 10), (2, -1)]
3>> l.sort(key=lambda x: x[1])
4>> print(l)
5[(2, -1), (3, 0), (9, 10), (1, 20)]
6#将字典按键值从大到小排序
7>> d = {'mike': 10, 'lucy': 2, 'ben': 30}
8>> dict(sorted(d.items(), key=lambda x: x[1], reverse=True))
9{'ben': 30, 'mike': 10, 'lucy': 2}
map()
filter()
reduce()
与 lambda 表达式
map()
原型
map(function, iterable, ...)
官方文档说明
返回一个将
function
应用于iterable
中每一项并输出其结果的迭代器。如果传入了额外的iterable
参数,function
必须接受相同个数的实参并被应用于从所有可迭代对象中并行获取的项。当有多个可迭代对象时,最短的可迭代对象耗尽则整个迭代就将结束。
举例
1>> l = [1, 2, 3, 4, 5]
2>> list(map(lambda x: x * 2, l))
3[2, 4, 6, 8, 10]
filter()
原型
map(function, iterable, ...)
官方文档说明
用
iterable
中函数function
返回真的那些元素,构建一个新的迭代器。iterable
可以是一个序列,一个支持迭代的容器,或一个迭代器。如果function
是None
,则会假设它是一个身份函数,即iterable
中所有返回假的元素会被移除。 请注意,filter(function, iterable)
相当于一个生成器表达式,当function
不是None
的时候为(item for item in iterable if function(item))
;function
是None
的时候为(item for item in iterable if item)
。
举例
1>> l = [1, 2, 3, 4, 5]
2>> list(filter(lambda x: x % 2 == 0, l))
3[2, 4]
reduce() 官方文档说明
原型
reduce(function, iterable[, initializer])
官方文档说明
将两个参数的
function
从左至右积累地应用到iterable
的条目,以便将该可迭代对象缩减为单一的值。例如,reduce(lambda x, y: x+y, [1, 2, 3, 4, 5])
是计算((((1+2)+3)+4)+5)
的值。左边的参数 x 是积累值而右边的参数 y 则是来自 iterable 的更新值。如果存在可选项 initializer,它会被放在参与计算的可迭代对象的条目之前,并在可迭代对象为空时作为默认值。如果没有给出 initializer 并且 iterable 仅包含一个条目,则将返回第一项。
举例
1>> reduce(lambda x, y: x+y, [1, 2, 3, 4, 5])
215
3>> reduce(lambda x, y: x+y, [1, 2, 3, 4, 5],100)
4115