使用 eval 和 exec 访问模块外的东西

Access things outside of module with eval and exec

如果我导入一个使用 execeval 的模块,是否可以让它访问主程序?

myExec.py

def myExec(code):
    exec(code)

main.py

import myExec
def test():
    print("ok")
myExec.myExec("test()")

是的!

exec 有几个可选参数,全局变量和局部变量。这些基本上以字典的形式告诉它允许使用哪些全局变量和局部变量。调用 globals()locals() 函数 returns 包含您调用的所有全局和局部变量的字典,因此您可以使用:

myExec.py:

def myExec(code, globals_=None, locals_=None):  # the trailing underscore is so that there are no name conflicts
    exec(code, globals_, locals_)

main.py:

import myExec
def test():
    print("ok")
myExec.myExec("test()", globals())