exec.py :
def func1():
pass
def required_func():
func1()
from some_module import set_callback
set_callback(required_func)
main.py :
execfile('exec.py',dict())
call_callback() #indirectly calls required_func
我执行文件为globals传递一个空的dict()。 required func
会在[{1}}中保存一个引用,但some_module
也可以调用吗?将func1
删除,因为它不在func1
中或保存在任何其他对象中吗?
答案 0 :(得分:0)
它不会被删除,因为当您定义函数required_func
时,它会引用其模块的globals
:
>>> d = dict()
>>> execfile('test.py', d)
>>> from some_module import f
>>> f
<function required_func at 0x7fb5649b5578>
>>> f.func_globals is d
True
如果不是这样,那么无论何时将函数导入另一个模块,该函数都将使用该模块的globals
。这是你不想要的东西。
命名空间冲突会有一个很大的问题,因此某些函数会根据导入的位置以不同的方式开始运行。