답변:
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()
모듈 범위에서 (따라서 수정 가능한 실제 dict를 반환) locals()
함수 범위에서 (따라서 절대로 수정 불가능한 의사를 반환)와 같습니다. 나는 vars()
모듈 범위에서 3 개의 문자, 한 음절을 저장하기 때문에 그 동의어 globals()
;-)를 절약하므로 모듈 범위에서 사용합니다 .
exec ''
: 각 방법에 몇 개의 실질적인 루프가있는 함수 시간. 파이썬의 성능 에이 핵심 최적화의 중요성을 알 수 있습니다.
모듈 내에서 모듈 범위 변수를 설정해야하는 경우 무엇이 문제 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
. 모듈 네임 스페이스보다 오래된 역사적인 유적 일 수 있습니다.
globals()["SOME_CONSTANT"] = 42
SOME_CONSTANT
런타임에 계산되는 것은 정확히 일정하지 않습니다. 그리고 만약 globals()
당신이 사용할 수 없다면, 당신은 그것의 속성을 수정하기 위해 다른 모듈에 도달해야합니다; 사람들이 궁금해 할 수밖에 없습니다.