2013-08-27 5 views
0

문제의 기능이 매우 길기 때문에 요약 해 보겠습니다.언 바운드 로컬 오류가 발생하는 이유는 무엇입니까?

def func1(X = None, Y = None) : 
    if X : 
    dostuff 
     if condition : 
     Z += 1 
    if Y : 
    print Y 

func1.Z = 0 

def func2(A) 
    for loop that does stuff and calls func1 

내가 이것을 실행하면이 라인 Z + = 1 오류가 있음을 알려줍니다 :

"UnboundLocalError 할당하기 전에 참조 된 지역 변수 'Z'를"나는 모든 언 바운드 현지 오류를 읽었습니다 그리고 내가 이미 찾을 수있는 과제 질문 이전에 추천되었지만 유사한 문제는 보이지 않고 해결책 중 어느 것도 작동하지 않습니다.

Z를 전역으로 설정해야합니까?

답변

5

함수 개체에 특성을 설정하면 이 아니기 때문에은 로컬 이름을 만듭니다. 함수 내의 함수 객체에서도 참조하십시오.

func1.Z += 1 

또는 글로벌로 만듭니다. 더 나은 방법은 그런 헛소리를 피하고 Z을 로컬 또는 함수 인수로 만들고 함수의 끝에 Z을 호출자에게 반환하십시오.

+0

아! 나는 몰랐다. 호기심에서 자존심이 생겼어 .Z도 잘 했어? 10 분 안에 답으로 선택하겠습니다. – CamelopardalisRex

+2

@AlexBaldwin : 아니요. 'self'는 함수가 아닙니다. '자기 '는 전혀 여기에 없다. – user2357112

+1

http://pythontutor.com/visualize.html# 여기 파이썬 이름과 값에 대해 좀 더 자세히 알아 보겠습니다. http://nedbatchelder.com/text/names.html은 좋은 설명입니다. –

관련 문제