>백엔드 개발 >파이썬 튜토리얼 >중첩된 함수는 Python에서 지역 변수와 클로저를 어떻게 처리합니까?

중첩된 함수는 Python에서 지역 변수와 클로저를 어떻게 처리합니까?

Linda Hamilton
Linda Hamilton원래의
2024-12-20 18:04:10823검색

How Do Nested Functions Handle Local Variables and Closures in Python?

중첩 함수의 지역 변수

이 복잡한 예에는 중첩 함수와 클로저가 포함되어 있어 동작이 혼란스러울 수 있습니다. 미스터리를 풀어봅시다.

중첩 함수 실행

중첩 함수는 실행될 때 상위 범위의 변수에 액세스합니다. 이 경우 pet_function은 get_petters 생성기 내의 중첩 함수입니다. 실행되면 get_petters 범위의 변수를 검색합니다.

클로저 셀 및 로컬 변수

pet_function에는 하나의 자유 변수(cage)가 있습니다. 컴파일하는 동안 이 자유 변수는 클로저 셀로 표시됩니다. pet_function이 실행되면 이 클로저 셀은 get_petters 주변 범위의 케이지 값을 확인합니다.

동적 조회 및 클로저

funs 목록이 실행될 때 문제가 되는 동작이 발생합니다. 생성됩니다. 이 시점에서 get_petters의 케이지에는 'cat' 값이 있습니다. funs의 각 함수가 호출되면 pet_function의 클로저 셀은 정의된 때가 아닌 해당 함수 호출 당시의 케이지 값을 조회합니다.

다른 동물에 액세스

이 문제를 해결하려면 pet_function이 각 동물에 대한 케이지 개체의 특정 인스턴스에 액세스해야 합니다. 이는 부분 함수, 새 함수 범위 또는 키워드 매개변수를 통해 달성할 수 있습니다.

부분 함수

부분 함수는 고정 매개변수를 사용하여 새 함수를 생성합니다. 다음은 functools.partial()을 사용하는 예입니다.

def pet_function(cage=None):
    print("Mary pets the " + cage.animal + ".")

yield (animal, partial(gotimes, partial(pet_function, cage=cage)))

새 함수 범위

새 함수 범위를 생성하면 케이지 변수가 새로 정의된 범위 내에 바인딩됩니다. 기능.

def scoped_cage(cage=None):
    def pet_function():
        print("Mary pets the " + cage.animal + ".")
    return pet_function

yield (animal, partial(gotimes, scoped_cage(cage)))

키워드 매개변수

케이지 변수를 키워드 매개변수의 기본값으로 바인딩:

def pet_function(cage=cage):
    print("Mary pets the " + cage.animal + ".")

yield (animal, partial(gotimes, pet_function))

위 내용은 중첩된 함수는 Python에서 지역 변수와 클로저를 어떻게 처리합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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