는 중첩 기능을 소유 토우 간단한 함수가있다.Problm는
내가()를 실행할 때 괜찮습니다. 내가) (B를 실행하면
, 내가 얻을 다시 오류 는 "UnboundLocalError는 : 할당하기 전에 참조 된 지역 변수 'ABC'는"
사람은 나를 도와 나에게 이유를 알 수 있습니까? 고마워요!
는 중첩 기능을 소유 토우 간단한 함수가있다.Problm는
내가()를 실행할 때 괜찮습니다. 내가) (B를 실행하면
, 내가 얻을 다시 오류 는 "UnboundLocalError는 : 할당하기 전에 참조 된 지역 변수 'ABC'는"
사람은 나를 도와 나에게 이유를 알 수 있습니까? 고마워요!
발생하는 문제는 변수의 범위에 있습니다. 프로그램에서 중첩 된 함수는 자신을 호출하는 외부 함수와 다른 자체 로컬 네임 스페이스/범위를 갖습니다. 대신이하려고하면 것을 의미 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()
를 사용하여 주어진 범위에 지역 변수를 인쇄 할 수 있습니다 작동합니다.
정말 고마워요! 내 문제는 정말 슬쩍 해요! – DlutAF
도와 줘서 고마워요! 그것은 흥미로웠다. – atru