python-3.x - 如何从 Python 代码对象构造可调用对象?

标签 python-3.x

意识到这是一个相当晦涩的问题,所以我将解释为什么我要研究这个问题。

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/

相关文章:

mysql - 在 Jupyter 笔记本、Conda 环境、Python 3.6 上找不到 MySQL

python - 输出在同一行打印,Py3k

python-3.x - 为什么 pyGame 或 pyglet 不支持 python 3?

Python3 作为默认 python 版本

python - 使用记录器对象而不是使用日志记录有什么好处?

python - 如何获取一列中最常见的类别并将其余计数存储在另一列中

Python 从另一个列表中排序一个列表

python - 导入错误 : No module named 'encodings'

python - 如何选择QTableWidget的多个单元格?

python - 在 Python 上出现异常时如何将 try/except 与 Selenium Webdriver 一起使用