Python : dict의 변수를 네임 스페이스로로드
함수 외부의 함수에 정의 된 여러 지역 변수를 사용하고 싶습니다. 그래서 나는 x=locals()
반환 값을 전달 하고 있습니다.
해당 사전에 정의 된 모든 변수를 함수 외부의 네임 스페이스로로드하여을 사용하여 값에 액세스하는 대신 x['variable']
단순히 variable
.
Bunch
대안을 고려하십시오 .
class Bunch(object):
def __init__(self, adict):
self.__dict__.update(adict)
따라서 사전 이 있고 clumsier 대신 d
구문을 x.foo
사용 하여 해당 값에 액세스 (읽기) 하려면 다음을 d['foo']
수행하십시오.
x = Bunch(d)
이 내부와 외부 모두 기능을 작동 - 그리고 그건 엄청나게 깨끗하고 주입보다 안전 d
에 globals()
! Zen of Python의 마지막 줄을 기억하십시오 ... :
>>> import this
The Zen of Python, by Tim Peters
...
Namespaces are one honking great idea -- let's do more of those!
고유 한 개체를 만드는 대신 다음을 사용할 수 있습니다 argparse.Namespace
.
from argparse import Namespace
ns = Namespace(**mydict)
반대로 수행하려면 다음을 수행하십시오.
mydict = vars(ns)
이것은 자신이 무엇을하고 있는지 알고있는 한 한 지역 공간의 변수를 다른 지역 공간으로 가져 오는 데 완벽하게 유효한 경우입니다. 이러한 코드가 유용한 방법으로 여러 번 사용되는 것을 보았습니다. 공통 글로벌 공간을 오염시키지 않도록주의해야합니다.
다음을 수행 할 수 있습니다.
adict = { 'x' : 'I am x', 'y' : ' I am y' }
locals().update(adict)
blah(x)
blah(y)
변수를 로컬 네임 스페이스로 가져 오는 것은 유효한 문제이며 템플릿 프레임 워크에서 자주 사용됩니다.
함수에서 모든 지역 변수를 반환합니다.
return locals()
그런 다음 다음과 같이 가져옵니다.
r = fce()
for key in r.keys():
exec(key + " = r['" + key + "']")
항상이 옵션이 있습니다. 이것이 최선의 방법인지는 모르겠지만 확실히 작동합니다. type (x) = dict 가정
for key, val in x.items(): # unpack the keys from the dictionary to individual variables
exec (key + '=val')
내 dict (yaml) 구성에서 재귀 네임 스페이스를 만들기 위해 다음 스 니펫 (PY2)을 사용했습니다.
class NameSpace(object):
def __setattr__(self, key, value):
raise AttributeError('Please don\'t modify config dict')
def dump_to_namespace(ns, d):
for k, v in d.iteritems():
if isinstance(v, dict):
leaf_ns = NameSpace()
ns.__dict__[k] = leaf_ns
dump_to_namespace(leaf_ns, v)
else:
ns.__dict__[k] = v
config = NameSpace()
dump_to_namespace(config, config_dict)
참고URL : https://stackoverflow.com/questions/2597278/python-load-variables-in-a-dict-into-namespace
'developer tip' 카테고리의 다른 글
PHP & (앰퍼샌드, 비트 및) 연산자 이해 (0) | 2020.12.11 |
---|---|
필드의 "길이"에 대한 MySQL SELECT 문이 1보다 큽니다. (0) | 2020.12.11 |
javascript 및 짝수 / 홀수 클래스 생성을 사용하지 않고 html 테이블에 얼룩말 줄무늬를 만드는 방법은 무엇입니까? (0) | 2020.12.11 |
대상 iPhone 시뮬레이터 매크로가 작동하지 않음 (0) | 2020.12.11 |
MATLAB 함수의 선택적 인수 (0) | 2020.12.11 |