在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__)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句