一. 匿名函数
Python使用 lambda 来创建匿名函数。所谓匿名函数,它与用 def 关键字定义的函数相比,没有函数名称。
1.1 匿名函数定义及特点
语法:
lambda [para1, para2, ...]: expression
从匿名函数的定义格式可以看出:
1. lambda后没有跟函数名,这就是匿名函数名称的由来. 2. [para1, para2, ...]是一个参数列表,它是可选的,而且是任何类型的. 3. expression表达式实现匿名函数功能的过程,并返回操作结果, 具有通常函数return的功能. 4. 整个匿名函数要在一行内实现所有定义.
1.2 代码示例
>>> lambda x, y: x+y # 在一行定义匿名函数 <function <lambda> at 0x00000217D39E1F28> # 打印上面 >>> a = lambda x, y: x + y # 定义匿名函数并赋值给a >>> a(2, 3) # a具有匿名函数的功能, 通过参数传值 5 # 输出结果
说明:
lambda的冒号前面表示的是参数,冒号后面的是表达式. 注意, lambda 可以接受任意多个参数, 但只能有一个表达式.
1.3 匿名函数的优点
1 使用Python写一些脚本时,使用lambda可以省去定义函数的过程,让代码更加精简. 2 对于一些抽象的,不会被别的地方再重复使用的函数,有时候函数起个名字也是个难题,使用lambda不需要考虑命名的问题. 3 使用lambda在某些时候能使代码更容易理解.
二. 匿名函数在内置函数中的使用
匿名函数一般不单独使用,经常与一些内置函数一块使用.
能使用匿名函数的内置函数为:
map,filter,max,min,sorted
记住上面这五个!!!
2.1 在 map 函数中的使用
map()函数接受两个参数.一个是函数, 一个是 Iterable(可迭代).
map 将传入的函数依次作用到序列的每个元素上., 并把结果作为新的 Iterator 返回.
举个例子:
def f(x): return x * x lis = [1, 2, 3, 4, 5] res = map(f, lis) # 求列表中每个数的平方 print(res) # 此时返回的是一个对象 <map object at 0x00000254573B0B38> print(list(res)) # 可以直接用list()求结果 [1, 4, 9, 16, 25]
用 lambda 表示就是这样:
lis = [1, 2, 3, 4, 5] res = map(lambda x: x*x, lis) # 求列表中每个数的平方 print(res) # 同上面的例子一样,返回的是一个对象 <map object at 0x000001D102040B38> print(list(res)) # 用list()获取结果 [1, 4, 9, 16, 25]
2.2 在 filter 函数中的使用
和map()类似, filter()也接受一个函数,一个序列.
与map()不同的是,filter()把传入的函数依次作用于每个元素, 然后根据返回值是True还是False来决定保留还是丢弃该元素.
filter() 会根据判断结果自动过滤掉不符合条件的元素, 只返回由符合条件的元素组成的新列表(需要list一下).
举个例子:
# 在一个列表中, 删除偶数, 保留奇数 def is_odd(x): return x%2 == 1 lis = [1, 2, 3, 4, 5, 6, 7, 8, 9] res = filter(is_odd, lis) print(res) # 注意, 这里依旧返回的是对象 <filter object at 0x0000022832D00C18> print(list(res)) # 这样返回的才是我们想要的结果 [1, 3, 5, 7, 9]
用 lambda 表示就是这样:
# 在一个列表中, 删除偶数, 保留奇数 lis = [1, 2, 3, 4, 5, 6, 7, 8, 9] res = filter(lambda x: x % 2 == 1, lis) print(res) # 同上例子,返回的是对象. <filter object at 0x0000020A8F240B38> print(list(res)) # 这样就是我们想要的结果 [1, 3, 5, 7, 9]
2.3 在 max 函数中的使用
2.4 在 min 函数中的使用
2.5 在 sorted 函数中的使用
原文地址:https://www.cnblogs.com/BlameKidd/p/10597294.html
时间: 2024-10-03 19:51:15