匿名函数lambda
- Python支持一种被称为匿名或lambda的函数,它仅由单条语句组成,该语句的结果就是返回值。
- 它通过lambda关键字进行定义,这个关键字没有别的含义,仅仅是说我们现在有一个函数
def short_function(x):
return x * 2
equiv_anon = lambda x: x * 2
- 例如:假设有一组字符串,你想要根据各字符串不同字母的数量对其进行排序
strings = ['foo', 'card', 'bar', 'aaaa', 'abab']
strings.sort(key = lambda x: len(set(list(x))))
strings
['aaaa', 'foo', 'abab', 'bar', 'card']
- 上面的代码中
strings.sort(key = lambda x: len(set(list(x))))
这一句,首先是对排序的依据进行了设定,声明了一个匿名函数,先把元素转换为list类型,然后转换为set,去除掉重复元素,然后用len函数计数字符串中出现的不同字母的数量, 依据这个lambda函数的返回值对strings的各个元素排序。
柯里化:部分参数应用
- 柯里化(currying)是指通过“部分参数应用”从现有函数派生出新函数的技术
- 例如:假设我们有一个执行两数相加的简单函数:
def add_numbers(x, y):
return x + y
- 通过这个函数,我们可以派生出一个新的只有一个参数的函数——add_five,它用于对其参数加5
add_five = lambda y: add_numbers(5, y)
- add_numbers的第二个参数称为“柯里化的”(curried)。其实就是定义了一个可以调用现有函数的新函数而已。
- 内置的functools模块可以用partial函数将这个过程简化:
from functools import partial
add_five = partial(add_numbers, 5)