意识到这是一个相当晦涩的问题,所以我将解释为什么我要研究这个问题。
Python jit 编译器接受一个可调用对象并返回一个可调用对象。
不过,这很好 - 我当前使用的 API 使用 Python 代码对象。
这个问题的一个简单答案是编写一个函数来执行代码,例如:
def code_to_function(code):
def fn():
return eval(code)
return fn
# example use
code = compile("1 + 1", '<string>', 'eval')
fn = code_to_function(code)
print(fn()) # --> 2
这是正确的,但在这种情况下,jit(恰好是 numba)不会评估实际的数字运算部分 - 这是有用的。
所以问题是,如何获取一个计算结果为值的代码对象,并从中转换/构造一个可调用对象?
更新,感谢@jsbueno的回答,here's an example of a simple expression evaluator using numba .
最佳答案
from types import FunctionType
new_function = FunctionType(code, globals[, name[, argdefs[, closure]]])
上面的其余参数可能取自您拥有的原始函数。
关于python-3.x - 如何从 Python 代码对象构造可调用对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36051410/