Python 使用eval和exec访问模块外的内容
如果我导入一个使用Python 使用eval和exec访问模块外的内容,python,python-3.x,exec,eval,Python,Python 3.x,Exec,Eval,如果我导入一个使用exec或eval的模块,是否可以让它访问主程序 myExec.py def myExec(code): exec(code) main.py import myExec def test(): print("ok") myExec.myExec("test()") 对! 有几个可选参数,全局参数和局部参数。这些基本上以字典的形式告诉它允许使用哪些全局变量和局部变量。调用globals()或locals()函数将返回包
exec
或eval
的模块,是否可以让它访问主程序
myExec.py
def myExec(code):
exec(code)
main.py
import myExec
def test():
print("ok")
myExec.myExec("test()")
对!
有几个可选参数,全局参数和局部参数。这些基本上以字典的形式告诉它允许使用哪些全局变量和局部变量。调用globals()
或locals()
函数将返回包含从中调用的所有全局和局部变量的字典,因此您可以使用:
myExec.py:
def myExec(code,globals_=None,locals_=None):#尾随的下划线是这样的,因此没有名称冲突
执行官(代码、全局变量、局部变量)
main.py:
导入myExec
def test():
打印(“确定”)
myExec.myExec(“test()”,globals())
不要为文件命名exec
,因为您现在在导入时会覆盖内置程序。如果您更改模块名称,您还需要更改它中的函数在main.py中的使用方式
——因此您上次的编辑是不完整的。