Python中的函数式编程:何时以及如何使用它-第一篇
用定义匿名函数
lambda函数式编程完全是关于调用函数并传递它们的,因此它自然涉及定义许多函数。您始终可以使用def关键字来定义函数,就像在本系列以前的教程中看到的那样。
但是,有时候,可以快速定义匿名函数而不必给它起一个名字,这很方便。在Python中,您可以使用lambda表达式来执行此操作。
技术说明:术语lambda源自lambda演算,lambda演算是一种正式的数学逻辑系统,用于表达基于函数抽象和应用的计算。
lambda表达式的语法如下:
下表总结了lambda表达式的各个部分:
lambda表达式的值是一个可调用的函数,就像用def关键字定义的函数一样。它接受由指定的参数,parameter_list并返回由指示的值expression。
这是一个快速的第一个实例:
第1行上的语句lambda本身就是表达式。在第2行,Python显示表达式的值,您可以看到它是一个函数。
如果传递给它的参数似乎是可调用的,则callable()返回内置Python函数。第4行和第5行表明,表达式返回的值实际上是可以调用的,因为它应该是一个函数。
TrueFalselambda在这种情况下,参数列表由单个参数组成s。后续表达式s[::-1]是切片语法,该s语法以相反的顺序返回字符。因此,此lambda表达式定义了一个临时的无名函数,该函数采用字符串参数,并返回带有相反字符的参数字符串。
lambda表达式创建的对象是一等公民,就像标准函数或Python中的任何其他对象一样。您可以将其分配给变量,然后使用该名称调用该函数:
从功能上讲-无双关语-等同于reverse()使用def关键字进行定义:
上面第4行和第8行上的调用行为相同。
但是,lambda在调用表达式之前不必将变量分配给表达式。您还可以lambda直接调用由表达式定义的函数:
这是另一个例子:
在这种情况下,参数是x1,x2,和x3,和表达是x1+x2+x3/3。这是一个匿名lambda函数,用于计算三个数字的平均值。再举一个例子,当您定义areverse_len()用作以下内容的回调函数时,请回想一下sorted():
您也可以lambda在此处使用一个函数:
一个lambda表达通常都会有一个参数列表,但它不是必需的。您可以定义lambda不带参数的函数。然后,返回值不依赖于任何输入参数:
请注意,您只能使用定义基本的功能
lambda。lambda表达式的返回值只能是一个表达式。甲lambda表达式不能包含像赋值语句或return,也可以包含控制结构,例如for,while,if,else,或def。
您在上一教程中了解了有关定义Python函数的信息,使用该函数定义的函数def可以有效地返回多个值。如果return函数中的语句包含多个逗号分隔的值,则Python打包它们并将它们作为元组返回:
此隐式元组打包不适用于匿名lambda函数:
但是您可以从lambda函数返回一个元组。您只需要用括号显式表示元组即可。您还可以从lambda函数返回列表或字典:
一个lambda表达都有自己的本地命名空间,所以参数名称不与全局命名空间相同的名称冲突。一个lambda表达式可以访问的变量在全局命名空间,但不能修改它们。最后一个奇怪的地方要注意。如果发现需要lambda在带格式的字符串文字(f-string)中包含表达式,则需要将其用显式括号括起来:
现在您知道了如何使用定义匿名函数lambda。
接下来,是时候深入研究Python中的函数式编程了。您将看到
lambda编写函数代码时函数如何特别方便。
Python提供了两个内置函数map()和filter(),它们适合函数式编程范例。第三,
reduce()不再是核心语言的一部分,但是仍然可以从名为的模块中获得functools。这三个函数中的每个函数都将另一个函数作为其参数之一。
#python#
笨办法学Python3Python编程教程python核心手册Python入门京东¥购买已下架