import sys
thismodule = sys.modules[__name__]
setattr(thismodule, name, value)
или без использования setattr
(который разбивает букву вопроса, но удовлетворяет тем же практическим целям; -):
globals()[name] = value
Примечание : в области видимости модуля последнее эквивалентно:
vars()[name] = value
, что немного более кратко, но не работает изнутри функции ( vars ()
дает переменные области видимости, в которой он вызывается: переменные модуля при вызове в глобальной области видимости, и затем можно использовать его R / W, но переменные функции при вызове в функции, а затем его следует рассматривать как R / O - онлайн-документы 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']
globals()["SOME_CONSTANT"] = 42