Python 匿名函数与三元运算详解:从 Lambda 到条件表达式

Leo
Leo
发布时间:2026-10-14| 5人浏览过
原创

本文深入解析 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 匿名函数与三元运算的资料请关注本站其他相关文章!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。