2017-09-07 12 views
0

는 중첩 기능을 소유 토우 간단한 함수가있다.Problm는

내가()를 실행할 때 괜찮습니다. 내가) (B를 실행하면

, 내가 얻을 다시 오류 는 "UnboundLocalError는 : 할당하기 전에 참조 된 지역 변수 'ABC'는"

사람은 나를 도와 나에게 이유를 알 수 있습니까? 고마워요!

답변

0

발생하는 문제는 변수의 범위에 있습니다. 프로그램에서 중첩 된 함수는 자신을 호출하는 외부 함수와 다른 자체 로컬 네임 스페이스/범위를 갖습니다. 대신이하려고하면 것을 의미 Python documentation

If a name is declared global, then all references and assignments go directly to the middle scope containing the module’s global names. Otherwise, all variables found outside of the innermost scope are read-only (an attempt to write to such a variable will simply create a new local variable in the innermost scope, leaving the identically named outer variable unchanged).

에 따르면

:

def b(): 
    abc = 1 
    global abc 
    print abc 
    def write(): 
     global abc 
     abc += 1 
     print abc 
    write() 
    print abc 

함수 b 오류없이 실행됩니다. 이는 abc의 값이 전 세계적으로 증가하고 write()을 호출 한 후에 2이된다는 것을 의미합니다.

abc 변수를 global으로 선언하지 않으면 중첩 함수 write()에 대해 읽기 전용이됩니다. write()은이를 변경할 수 없지만 인쇄하거나 로컬로 다시 할당 할 수 있습니다. 먼저 다른 지역 변수에 abc의 값을 재 할당하고 해당 변수를 변경하기 때문에 다음은

def a(): 
    abc = 1 
    def write(): 
     print abc 
     abc2 = abc 
     abc2 += 1 
     print abc2 
    write() 

당신은 print locals()를 사용하여 주어진 범위에 지역 변수를 인쇄 할 수 있습니다 작동합니다.

+0

정말 고마워요! 내 문제는 정말 슬쩍 해요! – DlutAF

+0

도와 줘서 고마워요! 그것은 흥미로웠다. – atru