gpt4 book ai didi

python - 如何将一串Python代码编译成一个可以调用函数的模块?

转载 作者:太空狗 更新时间:2023-10-29 17:58:00 25 4
gpt4 key购买 nike

在 Python 中,我有一串包含如下函数的 Python 源代码:

mySrc = '''
def foo():
print("foo")

def bar():
print("bar")
'''

我想将这个字符串编译成某种类似模块的对象,这样我就可以调用代码中包含的函数。

这是我想做的伪代码:

myMod = myCompile(mySrc)
myMod.foo()

这在 Python 中可行吗?我试过这个,但它不起作用:

myMod = compile(mySrc, '', 'exec')
myMod.foo()

这会产生如下错误消息:

<code object <module> at 0x104154730, file "", line 1>Traceback (most recent call last):
File "myfile.py", line XX, in run
myMod.foo()
AttributeError: 'code' object has no attribute 'foo'

最佳答案

你必须同时编译和执行它:

myMod = compile(mySrc, '', 'exec')
exec(myMod)
foo()

您可以将字典传递给 exec 以阻止 foo “泄漏”。将它与使用 types.ModuleType 创建的模块对象结合起来:

from types import ModuleType

compiled = compile(mySrc, '', 'exec')
module = ModuleType("testmodule")
exec(compiled, module.__dict__)

关于python - 如何将一串Python代码编译成一个可以调用函数的模块?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19850143/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com