1

执行.py

def func1():
   pass
def required_func():
   func1()
from some_module import set_callback
set_callback(required_func)

主.py

execfile('exec.py',dict())
call_callback() #indirectly calls required_func

我执行为全局变量传递空 dict() 的文件。required func将保存参考,some_modulefunc1也可以调用?将func1被删除,因为它不在globals()或保存在任何其他对象中?

4

1 回答 1

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模块的。这是你想要的。命名空间冲突将存在一个大问题,因此某些函数将开始以不同的方式运行,具体取决于它们的导入位置。

于 2013-10-09T18:28:04.967 回答