Python除def和单行lambda外还有哪些定义函数的优雅实现方式?
回答
Python 原生语法暂不支持你示例中 xxx 形式的多行内联函数定义,但可以根据函数逻辑复杂度选择对应的优雅实现方案:
需求实现方案
情况1:函数逻辑仅为单行表达式
直接用 lambda 即可完美匹配你想要的写法:
- 工厂函数示例
def create(first): return lambda second: print(first, second)
- 字典存储函数示例
obj = { 'a': lambda: 'a', 'b': lambda: 'b', 'c': lambda: 'c' }
情况2:函数包含多行逻辑
如果函数逻辑超过一行,目前最推荐的写法就是你已经在用的嵌套 def,可读性和性能都是最优的,不需要强行追求更短的写法。
如果确实需要动态生成函数,可以用 types.FunctionType 或者 exec 动态构造,但这两种方式可读性差、调试难度高,非必要不推荐使用。
其他定义可调用对象的方式
除了 def 和 lambda,Python 还有几种可以实现函数功能的方式:
- 类实现
__call__方法,实例可以像函数一样调用
class Runner: def __init__(self, first): self.first = first def __call__(self, second): # 支持任意多行逻辑 print(self.first, second) def create(first): return Runner(first)
- 用
functools.partial生成偏函数,用来固定原有函数的部分参数
from functools import partial def print_val(first, second): print(first, second) def create(first): return partial(print_val, first)
- 底层动态构造
FunctionType对象,一般用于框架层的元编程场景,业务代码很少用到
内容的提问来源于stack exchange,提问作者z3r0
相关产品推荐
相关产品推荐

