顾名思义,匿名函数就是没有名字的函数。在python中使用lambda关键字来实现匿名函数。可通过如下方法获取python中的关键字:
import keyword
kw = keyword.kwlist
匿名函数的一个好处是,当你只需要函数实现一个简单的功能时,不需要额外去创造一个函数,并为其起一个名字。这样可以使代码更加紧凑,并且避免了为函数起名的困扰。例如,你需要实现一个求两个数之和的函数,常规函数的写法为:
def add_two_mums(x, y):
return x + y
但是内容过于简单,没必要专门写成一个函数,这时就可以用匿名函数:
f = lambda x, y: x + y
f(1, 2)
- lambda表达式的语法为:lambda arguments: expression。arguments_list是参数列表,expression是表达式。
- lambda表达式在语法上限制为单行表达式。因此,lambda表达式的功能一般比较简单,单行的语法限制决定了它很难实现复杂的逻辑。
- lambda表达式的主要用法:
- 将lambda表达式赋值给一个变量(PEP 8规范不推荐这种做法)
f = lambda x, y: x + y
print(f(1, 2))
# 输出
# 3
- 将lambda表达式作为其它函数的返回值。函数的返回值也可以是函数,此时,被返回的函数称为内部函数或者嵌套函数,包含内部函数的函数称为外部函数。
def add_two_nums(x, y):
return lambda x, y: x + y
f = add_two_nums(1, 2)
print(f)
print(f(1, 2))
# 输出
# <function add_two_nums.<locals>.<lambda> at 0x000001CE8224A0D8>
# 3
- 将lambda表达式作为参数转递给其它函数。在python中,接受函数作为参数的函数有filter(),map(),reduce()等。
import functools
import numpy as np
"""The definitions of filter, map and reduce:
filter(function, iterable)
map(function, iterable)
reduce(function, sequence, initial)
"""
random_nums = np.random.randint(100, size=10)
random_nums_filter = list(filter(lambda x: x % 2 == 0, random_nums))
random_nums_map = list(map(lambda x: x % 2 == 0, random_nums))
random_nums_reduce = functools.reduce(lambda x, y: x + y, random_nums)
print(random_nums)
print(random_nums_filter)
print(random_nums_map)
print(random_nums_reduce)
"""Output:
[69, 92, 42, 10, 14, 35, 39, 92, 91, 82]
[92, 42, 10, 14, 92, 82]
[False, True, True, True, True, False, False, True, False, True]
566
"""
913




被折叠的 条评论
为什么被折叠?



