
python 支持直接将匿名函数(lambda)或具名函数作为参数传入,通过 `*args` 可灵活接收任意数量的函数对象,并依次调用,无需预先定义函数列表。
在 Python 中,函数是一等公民(first-class objects),可被赋值、存储于数据结构、作为参数传递或作为返回值。这使得实现类似 PHP 中 s('a', 'b', function(){...}, function(){...}) 的匿名多函数传参模式非常自然且简洁。
核心方案是使用 *args 解包可变位置参数,并配合 lambda 表达式实现真正的“即写即用”函数:
def s(t1, t2, *funcs):
print(t1) # 注意:PHP 中 echo '$t1' 是字面量输出,Python 应输出变量值
print(t2)
for func in funcs:
func() # 直接调用每个传入的函数对象
# ✅ 正确用法:传入两个 lambda 和一个普通函数
def say_six():
print(6)
s('a', 'b',
lambda: print(5), # 匿名函数,无需命名
lambda: print(7 + 1), # 支持表达式
say_six # 已定义函数名(不加括号!)
)输出结果:
这本书给出了一份关于python这门优美语言的精要的参考。作者通过一个完整而清晰的入门指引将你带入python的乐园,随后在语法、类型和对象、运算符与表达式、控制流函数与函数编程、类及面向对象编程、模块和包、输入输出、执行环境等多方面给出了详尽的讲解。如果你想加入 python的世界,David M beazley的这本书可不要错过哦。 (封面是最新英文版的,中文版貌似只译到第二版)
a b 5 8 6
⚠️ 注意事项:
立即学习“PHP免费学习笔记(深入)”;
- lambda 仅支持单个表达式,不可包含语句(如 if、for、return 等);若逻辑复杂,请改用 def 定义具名函数后传入。
- 传入的是函数对象本身(如 lambda: ... 或 say_six),切勿写成 lambda: ...() 或 say_six() —— 后者会立即执行并传入返回值(通常是 None),导致运行时报错 TypeError: 'NoneType' object is not callable。
- functools.partial 适用于“预设部分参数”的场景(如 partial(print, "Hello")),但本例中目标是延迟执行,lambda 更直观、语义更清晰;partial(print, 5) 实际等价于 lambda: print(5),但前者略显冗余且可读性较低。
✅ 最佳实践总结:
使用 *funcs 接收可变函数参数 + lambda 构建轻量匿名函数 + 显式调用 func(),即可完全复现 PHP 的动态函数调用风格,代码简洁、意图明确、符合 Pythonic 哲学。










