Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用eval和exec访问模块外的内容_Python_Python 3.x_Exec_Eval - Fatal编程技术网

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中的使用方式
——因此您上次的编辑是不完整的。