2017-12-27 8 views
1

내 프로그램에서 globals()을 사용하여 모든 전역 변수를 반복합니다. 이것은 내가 그것에 대해 갔다하는 방법입니다 : 물론, 그렇게, 난 그냥이 개 더 전역 변수, kv을 만들어전역 변수 반복() 사전

for k, v in globals().iteritems(): 
    function(k, v) 

. 같은 예외를 처리 this 같은

# Attempt 1: 

g = globals() 
for k, v in globals().iteritems(): 
    function(k, v) 

# Attempt 2 (this one seems to work, but on closer inspection it duplicates 
#the last item in the dictionary, because another reference is created to it): 

k = v = None 
for k, v in globals().iteritems(): 
    function(k, v) 

내가 본 게시물 : 그래서 나는이 예외가 : 문제를 해결에서 내 다양한 ​​시도 실패, 여기

RuntimeError: dictionary changed size during iteration 

을 그리고 있습니다. 이것은 변수 이름을 지정하지 않고 각 사전 항목에 변수를 할당 할 수있는 방법이 없기 때문에 다릅니다. 이렇게하면 오류가 발생합니다.

답변

5

iteritems()을 사용 중입니다. 라이브 사전을 반복합니다. 항목의 복사본을 먼저 생성하여 문제를 쉽게 피할 수 있습니다. 파이썬 2 단지 globals().items()를 사용

for k, v in globals().items(): 
    function(k, v) 

를 파이썬 3에서, 먼저 목록에있는 모든 항목 쌍을 구체화 list()을 사용하십시오 :

for k, v in list(globals().items()): 
    function(k, v) 

그리스트가 될 정도로 큰 없을 것 이슈; 모듈 전역은 수십 가지 항목보다 거의 없습니다.

당신도 수십 튜플가 문제가 있다고 판단되는 경우, 만 키에 대한 목록 작성 :

for k in list(globals()): # python 2 and 3 
    function(k, globals()[k])