file1.py
:
def test_globals():
globals()['t']=5
在python3 repl中:
>>> from file1 import *
>>> test_globals()
>>> t
Traceback ....
NameError: name 't' is not defined
>>> def test_globals2(): #local context
globals()['t'] = 5
>>> test_globals2()
>>> t
5
如何修复test_globals函数以实际修改globals()
?
答案 0 :(得分:1)
您所做的问题是from file1 import *
没有导入t
因为它不存在。如果您重复import
行,它将起作用:
>>> from file1 import *
>>> test_globals()
>>> t
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 't' is not defined
>>> from file1 import *
>>> t
5
另一件可行的方法是:
>>> import file1 as f1
>>> f1.t
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'module' object has no attribute 't'
>>> f1.test_globals()
>>> f1.t
5
但是,如果您仅在重新加载模块后(如您在评论中所写),请考虑使用importlib.reload
。