【发布时间】:2012-07-02 17:22:22
【问题描述】:
如何在 Python 中动态创建函数?
我在这里看到了一些答案,但我找不到能描述最一般情况的答案。
考虑:
def a(x):
return x + 1
如何即时创建这样的功能?我必须compile('...', 'name', 'exec')吗?但那又如何呢?从编译步骤创建一个虚拟函数并替换其代码对象?
或者我应该使用types.FunctionType?怎么样?
我想自定义所有内容:参数的数量、它们的内容、函数体中的代码、结果……
【问题讨论】:
-
我不认为它是重复的:
dynf = FunctionType(compile('def f(x): return x + 3', 'dyn.py', 'exec'), globals())和print dynf(1)与TypeError: '<module>() takes no arguments (1 given)'中断 -
仅仅因为答案可能错误并不意味着这不是重复的问题。
-
链接的问题有一个更新的答案,展示了如何创建一个带参数的函数。
-
您确定无法使用 Python 中存在的函数式编程(lambda、闭包、组合...)实现您想要的吗?代码对象很繁琐,并且没有很好的文档记录(或根本没有记录)。此外,它们被视为内部组件,可能会在通知或不通知的情况下进行更改。