>백엔드 개발 >파이썬 튜토리얼 >중첩된 Python 함수 내의 외부 범위에 있는 변수를 어떻게 수정할 수 있나요?

중첩된 Python 함수 내의 외부 범위에 있는 변수를 어떻게 수정할 수 있나요?

Susan Sarandon
Susan Sarandon원래의
2024-12-12 11:04:09522검색

How Can I Modify Variables in Outer Scopes within Nested Python Functions?

외부 범위에서 변수 수정

함수 캡슐화는 Python에서 일반적인 관행이지만, 외부 범위에 정의된 변수에 액세스하고 수정할 때 문제가 발생합니다. 범위. 이 문서에서는 전역적으로 정의되지는 않았지만 둘러싸는 범위에 존재하는 변수를 수정하는 방법을 살펴봅니다.

Python 범위 및 변수 결정

Python은 어휘 범위를 따릅니다. 즉, 변수는 다음과 같습니다. 소스 코드에서의 위치를 ​​기반으로 확인됩니다. 외부 범위(포함 함수)는 중첩된 범위(내부 함수) 내에 정의된 변수에 액세스할 수 있지만 그 반대는 적용되지 않습니다. 전역으로 선언하지 않고 외부 범위의 변수를 수정하려고 하면 UnboundLocalError가 발생합니다.

외부 범위 변수 수정

Python 3에서는 nonlocal 키워드가 해결책을 제공합니다. . 변수가 외부 범위에 정의되어 있더라도 내부 함수 내에서 변수를 수정할 수 있습니다. 변수가 로컬이 아닌 것으로 선언되면 Python은 해당 변수가 외부 범위에 바인딩된 것으로 간주합니다.

예:

def outer():
    a = 5

    def inner():
        nonlocal a
        a += 1
        print(a)

outer()

출력:

6

Python 2 해결 방법

Python 2의 경우 직접적인 방법은 없습니다. 비로컬과 동일합니다. 그러나 목록이나 사전과 같은 변경 가능한 객체를 사용하면 동일한 효과를 얻을 수 있습니다. 가변 객체의 내용을 수정하면 외부 범위의 변수 값을 간접적으로 수정할 수 있습니다.

예:

def outer():
    a = []

    def inner():
        a.append(1)

inner()
inner()
print(a)

출력:

[1, 1]

Python의 범위 규칙을 이해하고 적절한 기술을 사용하면 외부, 비전역 범위에 있는 변수에 액세스하고 수정할 수 있습니다. 캡슐화를 촉진하고 바람직한 프로그램 동작을 달성합니다.

위 내용은 중첩된 Python 함수 내의 외부 범위에 있는 변수를 어떻게 수정할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.