匿名函数
什么是匿名函数?
顾名思义,即是不需要显式的指定函数名。
匿名函数有个限制,就是只能有一个表达式,不用写return,返回值就是该表达式的结果。
用匿名函数有个好处,因为函数没有名字,不必担心函数名冲突。此外,匿名函数也是一个函数对象,也可以把匿名函数赋值给一个变量,再利用变量来调用该函数:
有些函数在代码中只用一次,而且函数体比较简单,使用匿名函数可以减少代码量
Lambda 关键字在Python表达式内创建匿名函数,然而,Python简单的语法限制了lambda函数的定义体只能使用lambada纯表达式。(不能使用while、for、try等语句)
def f1(x, y): return x ** y f2 = lambda x, y: x ** y print(f1(2, 3)) print(f2(2, 3))
lambda语法句法只是语法糖,与def 语句一样,lambda表达式会创建函数对象。
除了作为参数传递给高阶函数之外,Python相对较小使用匿名函数。由于lambda等限制这导致lambda难以被理解,或者写出。
Lundh提出的lambda表达式重构秘诀
如果使用lambda表达式导致一段代码难以阅读或理解。你可以参考这样的思路去重构
- 测试,捋清lambda执行的效果即实现的功能。并编写注释
- 研究注释,找出相适合的变量名进行概括
- 把lambda表达式转换成def,并定义
- 测试其效果
lambda 配合Map函数
map(__func,__iter...)
l1 = [_ for _ in range(10)] def f1(x, y): return x ** y def f2(x, y): return x ** y m1 = map(f2, l1, l1) m2 = map(f1, l1, l1) m3 = map(lambda x, y: x ** y, l1, l1) print(list(m1)) print(list(m2)) print(list(m3))
还有更多性能更高、写法更简洁的用法期待我们去学习、探索、挖掘