Python Lambda 表达式等价普通函数实现
Python Lambda 表达式等价普通函数实现
flyfish
Lambda 是 Python 中的匿名函数,用于快速定义单行、简单逻辑的函数,
语法:lambda 参数: 表达式。
每一个 Lambda 用法都搭配等价的普通def函数实现
1. Lambda 基础
1.1 立即执行 Lambda(IIFE)
Immediately Invoked Function Expression 立即调用函数表达式
# Lambda 写法:匿名+立即调用print("立即执行lambda:",(lambdax:x+1)(2))# 输出3# 等价普通函数:定义+立即调用defadd_one(x):returnx+1print("等价普通函数:",add_one(2))1.2 命名 Lambda
add_one=lambdax:x+1print("命名lambda调用:",add_one(2))1.3 多参数 Lambda
# Lambda 写法full_name=lambdafirst,last:f"Full name:{first.title()}{last.title()}"print("多参数lambda:",full_name("guido","van rossum"))# 等价普通函数deffull_name(first,last):returnf"Full name:{first.title()}{last.title()}"print("等价普通函数:",full_name("guido","van rossum"))2. Lambda 支持的所有参数类型
Lambda 完全兼容 Python 函数的参数类型,和普通函数参数规则一致。
| 参数类型 | Lambda 写法 | 等价普通函数 |
|---|---|---|
| 位置参数 | (lambda x,y,z: x+y+z)(1,2,3) | def f(x,y,z): return x+y+z |
| 默认参数 | (lambda x,y,z=3: x+y+z)(1,2) | def f(x,y,z=3): return x+y+z |
| 关键字参数 | (lambda x,y,z=3: x+y+z)(1,y=2) | def f(x,y,z=3): return x+y+z |
可变位置参数*args | (lambda *args: sum(args))(1,2,3) | def f(*args): return sum(args) |
可变关键字参数**kwargs | (lambda **kwargs: sum(kwargs.values()))(one=1,two=2) | def f(**kwargs): return sum(kwargs.values()) |
| 关键字-only 参数 | (lambda x,*,y=0: x+y)(1,y=2) | def f(x,*,y=0): return x+y |
# Lambda 合集print("位置参数:",(lambdax,y,z:x+y+z)(1,2,3))print("默认参数:",(lambdax,y,z=3:x+y+z)(1,2))print("关键字参数:",(lambdax,y,z=3:x+y+z)(1,y=2))print("*args:",(lambda*args:sum(args))(1,2,3))print("**kwargs:",(lambda**kwargs:sum(kwargs.values()))(one=1,two=2))print("关键字-only:",(lambdax,*,y=0:x+y)(1,y=2))# 等价普通函数合集deff1(x,y,z):returnx+y+zdeff2(x,y,z=3):returnx+y+zdeff3(x,y,z=3):returnx+y+zdeff4(*args):returnsum(args)deff5(**kwargs):returnsum(kwargs.values())deff6(x,*,y=0):returnx+y3. Lambda 语法 三元表达式
Lambda 写法
odd_even=lambdax:"odd"ifx%2else"even"print("3是:",odd_even(3))# oddprint("4是:",odd_even(4))# even等价普通函数(if-else 语句)
defodd_even(x):ifx%2:return"odd"else:return"even"print("3是:",odd_even(3))print("4是:",odd_even(4))输出
3是: odd 4是: even完整代码
print("立即执行lambda:",(lambda x:x+1)(2))# 输出3# 等价普通函数:定义+立即调用 defadd_one(x):returnx+1print("等价普通函数:",add_one(2))add_one=lambda x:x+1print("命名lambda调用:",add_one(2))#Lambda 写法full_name=lambda first,last:f"Full name: {first.title()} {last.title()}"print("多参数lambda:",full_name("guido","van rossum"))# 等价普通函数 deffull_name(first,last):returnf"Full name: {first.title()} {last.title()}"print("等价普通函数:",full_name("guido","van rossum"))print("位置参数:",(lambda x,y,z:x+y+z)(1,2,3))print("默认参数:",(lambda x,y,z=3:x+y+z)(1,2))print("关键字参数:",(lambda x,y,z=3:x+y+z)(1,y=2))print("*args:",(lambda*args:sum(args))(1,2,3))print("**kwargs:",(lambda**kwargs:sum(kwargs.values()))(one=1,two=2))print("关键字-only:",(lambda x,*,y=0:x+y)(1,y=2))deff1(x,y,z):returnx+y+z deff2(x,y,z=3):returnx+y+z deff3(x,y,z=3):returnx+y+z deff4(*args):returnsum(args)deff5(**kwargs):returnsum(kwargs.values())deff6(x,*,y=0):returnx+yprint("位置参数:",f1(1,2,3))print("默认参数:",f2(1,2))print("关键字参数:",f3(1,y=2))print("*args:",f4(1,2,3))print("**kwargs:",f5(one=1,two=2))print("关键字-only:",f6(1,y=2))输出
立即执行lambda: 3 等价普通函数: 3 命名lambda调用: 3 多参数lambda: Full name: Guido Van Rossum 等价普通函数: Full name: Guido Van Rossum 位置参数: 6 默认参数: 6 关键字参数: 6 *args: 6 **kwargs: 3 关键字-only: 3 位置参数: 6 默认参数: 6 关键字参数: 6 *args: 6 **kwargs: 3 关键字-only: 3