Что мне передать в качестве первого параметра object
функции setattr(object, name, value)
, чтобы установить переменные в текущем модуле?
Например:
setattr(object, "SOME_CONSTANT", 42);
дает тот же эффект, что и:
SOME_CONSTANT = 42
внутри модуля, содержащего эти строки (с правильными object
).
Я динамически генерирую несколько значений на уровне модуля, и, поскольку я не могу определить __getattr__
на уровне модуля, это мой запасной вариант.
vars()
на уровне модуля, а не внутри функции.vars()
эквивалентноglobals()
области видимости модуля (и поэтому возвращает истинный, изменяемый словарь), ноlocals()
области видимости функции (и поэтому возвращает псевдодикт, который нельзя изменять). Я используюvars()
в области модуля, так как он сохраняет 3 символа, один слог, по сравнению с его синонимом в этой областиglobals()
;-)exec ''
: установите функцию с парой существенных циклов в каждую сторону, и вы увидите важность этой базовой оптимизации для производительности Python.