developer tip

중첩 함수가 외부 함수의 변수에 액세스 할 수 있지만 수정할 수없는 이유

optionbox 2020. 11. 11. 19:56
반응형

중첩 함수가 외부 함수의 변수에 액세스 할 수 있지만 수정할 수없는 이유


이 질문에 이미 답변이 있습니다.

아래 두 번째 경우에서 Python은 지역 변수를 찾으려고합니다. 찾을 수없는 경우 첫 번째 경우처럼 외부 범위에서 볼 수없는 이유는 무엇입니까?

이것은 로컬 범위에서 x를 찾은 다음 외부 범위를 찾습니다.

def f1():
    x = 5
    def f2():
         print x

이것은 local variable 'x' referenced before assignment오류를 제공 합니다.

def f1():
    x = 5
    def f2():
        x+=1

함수 f2 ()의 서명을 수정할 수 없으므로 x의 값을 전달하고 반환 할 수 없습니다. 그러나 x를 수정하는 방법이 필요합니다. 파이썬에게 외부 범위에서 변수 이름을 찾도록 명시 적으로 지시하는 방법이 global있습니까 (키워드 와 유사한 것 )?

Python 버전 : 2.7


def f1():
    x = { 'value': 5 }
    def f2():
        x['value'] += 1

해결 방법은 변경 가능한 개체를 사용하고 해당 개체의 구성원을 업데이트하는 것입니다. 이름 바인딩은 때때로 파이썬에서 까다 롭습니다.


Python 3.x에서는 다음이 가능합니다.

def f1():
        x = 5
        def f2():
                nonlocal x
                x+=1
        return f2

게시물 에는 Python 2.x의 문제와 해결책도 나와 있습니다. 또한 이 주제에 대한 자세한 내용은 PEP 3104 를 참조하십시오.

참고 URL : https://stackoverflow.com/questions/11987358/why-nested-functions-can-access-variables-from-outer-functions-but-are-not-allo

반응형