Python 匿名函数与三元运算详解:从 Lambda 到条件表达式
本文深入解析 Python 中匿名函数(Lambda)与三元运算的核心用法。详细对比 Lambda 与 def 的定义差异,演示 Lambda 在 map 及 Apply 函数中的高阶应用,并梳理 Python 特有的三元运算符语法格式,帮助开发者写出更简洁高效的代码。
Python 匿名函数与三元运算详解
匿名函数
所谓匿名函数,即无需显式指定函数名称的函数定义方式。
首先观察以下代码示例:
def calc(x,y):
return x*y
print(calc(2,3))
# 换成匿名函数
calc = lambda x,y:x*y
print(calc(2,3))
或许你会觉得单独使用它并未带来显著便利。确实,若仅如此使用,改进并不明显。但匿名函数的核心价值在于与其他高阶函数配合使用,如下文所示。
res = map(lambda x:x**2,[1,2,3,4,5])
print(list(res))
# 结果:
# [1, 4, 9, 16, 25]
for i in res:
print(i)
# 结果:
# 1
# 4
# 9
# 16
# 25
匿名函数的主要作用包括:
1. 精简代码结构
2. 提升代码的高级感与简洁性
Lambda 表达式基础与对比
Lambda 表达式
Lambda 的基本语法原型为:lambda 参数 : 操作(参数)。
Lambda 函数也被称为匿名函数,因其没有具体的名称。它允许用户快速定义单行函数,并可应用于任何需要函数对象的场景,这与使用 def 关键字定义的常规函数有所区别。
Lambda 与 def 的主要区别如下:
- def 创建的函数具有明确的名称,而 lambda 没有。
- Lambda 会返回一个函数对象,但该对象通常不赋值给标识符;而 def 会将函数对象赋值给一个变量名。
- Lambda 仅是一个表达式,而 def 是一条完整的语句。
- 在 Lambda 表达式中,冒号(:)后只能跟随一个表达式;而 def 函数体中可以包含多个语句。
- 像 if、for 或 print 这样的语句不能直接用于 Lambda 中,但可以在 def 定义的函数中使用。
- Lambda 通常用于定义简单的函数逻辑,而 def 适用于定义更复杂的函数逻辑。
>>> def add(x,y): #定义一个加法函数
return x+y #返回两个参数的相加的值
>>> z=f(3,4)
>>> print(z)
7 #调用加法函数返回7
>>> lambda x,y:x+y
<function <lambda> at 0x0000020F385B86A8>
#可以看到lambda是一个 function(函数)类对象
>>> f=lambda x,y:x+y #功能实现的跟add(x,y)一样
>>> f(1,2)
3
>>> f(3,4)
7
>>> def multiply(x,y):
return x*y
>>> multiply(3,4)
12
>>> multiply=lambda x,y:x*y
>>> multiply(3,4)
12
>>> def subtract(x,y):
return x-y
>>> subtract(3,4)
-1
>>> subtract=lambda x,y:x-y
>>> subtract(3,4)
-1
>>> def divide(x,y):
return x/y
>>> divide(4,2)
2.0
>>> divide=lambda x,y:x/y
>>> divide(4,2)
2.0
#上面的乘法函数,减法函数,除法函数都可以用lambda表达式来代替,更方便
Lambda 的实际应用场景
Lambda 的实际应用场景
# 2.lambda 的应用
# ---CASE 1
fs = map(lambda i:(lambda j: i*j), range(6))
print([f(2) for f in fs])
#---CASE 2
fs = [lambda j:i*j for i in range(6)]
print([f(2) for f in fs])
#---CASE 3
fs = []
for i in range(6):
fs.append(lambda j:i*j)
if i==3:
break
print([f(2) for f in fs])
#---CASE 4
fs = [(lambda i:lambda j:i*j)(i) for i in range(6)]
print([f(2) for f in fs])
# 结果:
# [0, 2, 4, 6, 8, 10]
# [10, 10, 10, 10, 10, 10]
# [6, 6, 6, 6]
# [0, 2, 4, 6, 8, 10]
map() 函数
接下来介绍 map() 函数,它可将一个函数映射到一个可迭代对象上。沿用前文定义的变量 a 和 f,可以编写如下代码:
map(f , a)
即依次将函数 f 应用于列表 a 的每个元素,从而获取结果。若使用 Lambda 表达式替换 f,代码变为:
map( lambda x : x + 1, [1, 2, 3] )
此时逻辑是否更加清晰直观?
Apply 函数与参数传递
Apply() 函数
Python 中 apply 函数的标准格式为:apply(func, *args, **kwargs)。
其中,func 参数可以是匿名函数。
主要用途:当函数的参数存在于一个元组或字典中时,用于间接调用该函数,并按顺序将元组元素或字典参数传递给目标函数。
解析:args 是一个包含按函数所需位置参数传递的顺序元组。简言之,若函数 A 定义为 A(a=1, b=2),则元组必须严格遵循此参数位置顺序传递(如 a=3, b=4),而不能颠倒顺序(如 b=4, a=3)。kwargs 是一个包含关键字参数的字典;若需传递 kwargs 而不传 args,则必须在 args 位置留空。
apply 的返回值即为函数 func 的返回值。
def function(a,b):
print(a,b)
apply(function,('good','better'))
apply(function,(2,3+6))
apply(function,('cai','quan'))
apply(function,('cai',),{'b':'caiquan'})
apply(function,(),{'a':'caiquan','b':'Tom'})
输出结果如下:
('good', 'better')
(2, 9)
('cai', 'quan')
('cai', 'caiquan')
('caiquan', 'Tom')
Python 三元运算语法
三元运算
三元运算又称三目运算,是对简单条件语句的简化写法。
举例说明:将简单条件语句转换为三元运算形式。
if 条件成立:
val = 1
else:
val = 2
val = 1 if 条件成立 else 2
Python 中的三元运算符语法与其他语言略有不同,其他语言通常采用以下格式:
判定条件 ? 为真时的结果 : 为假时的结果
例如:
result = 5 >3?1:0
而在 Python 中的格式为:
为真时候的结果 if 判定条件 else 为假时的结果<br>result =x if condition else y
例如:
1 if 5>0 else 0
def func(x,y):
'''定义一个函数,如果x大于y,返回x-y,否则,返回y-x'''
return x-y if x>y else y-x
r1 = func(10,18)
r2 = func(18,12)
print(r1)
print(r2)
结果:
8
6
以上即为 Python 匿名函数与三元运算的详细学习笔记,更多关于 Python 匿名函数与三元运算的资料请关注本站其他相关文章!
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













