Answers:
import sys
thismodule = sys.modules[__name__]
setattr(thismodule, name, value)
或者,不使用setattr
(打破问题的字母,但满足相同的实际目的;-):
globals()[name] = value
注意:在模块范围内,后者等效于:
vars()[name] = value
这更加简洁,但是在函数内部不起作用(vars()
给出在其范围内调用的变量:在全局范围内调用时模块的变量,然后可以使用R / W,但在函数中可以使用变量在函数中调用时,然后必须将其视为R / O - Python在线文档对此特定区别可能会造成混淆。
vars()
在模块级作用域而不是在函数内部调用时,它将起作用。
vars()
globals()
在模块范围内等效(因此返回一个真实的,可修改的字典),但locals()
在函数范围内等效(因此返回一个永不被修改的伪字典)。我vars()
在模块作用域中使用它,因为它节省了3个字符(一个音节),而不是它的同义词globals()
;-)
exec ''
:给函数计时,并以各种方式循环几个循环,您将看到此核心优化对Python性能的重要性。
如果必须从模块内部设置模块范围的变量,那有什么问题global
呢?
# my_module.py
def define_module_scoped_variables():
global a, b, c
a, b, c = 'a', ['b'], 3
从而:
>>> import my_module
>>> my_module.define_module_scoped_variables()
>>> a
NameError: name 'a' is not defined
>>> my_module.a
'a'
>>> my_module.b
['b']
global but not really
声明令人费解。我想可能是模块名称空间之前的历史遗物。