이 기사에서는 "Python의 클로저 및 비로컬" 사용법을 소개합니다. nonlocal은 Python3.0의 새로운 키워드이고 python2.x에서는 지원되지 않기 때문입니다. 이 기사에서는 Python2.x의 임베디드 문제를 해결하도록 제안합니다. 함수 집합에서 외부 변수를 참조하는 유일한 방법은 전역 변수를 정의하기 위해 전역 키워드를 사용하는 것입니다. 또 다른 가능한 해결책은 작업할 키워드 대신 목록이나 사전을 사용하는 것입니다.
예는 다음과 같습니다.
1.python3.0 비로컬 키워드 사용
>>> def outer(): x = 1 def inner(): nonlocal x x = 2 print("inner:", x) inner() print("outer:", x) >>> outer() inner: 2 outer: 2
2.python2. x list 또는 dict를 사용하여
>>> def outer(): x = [1] def inner(): x[0] += 1 #修改x[0]保存的值 print("inner:", x[0]) inner() print("outer:", x[0]) >>> outer() inner: 2 outer: 2
추가 참조:
1. //stackoverflow.com/questions/1261875/python-nonlocal-statement
2. 자바스크립트와 Python 범위의 범위 체인 정의의 유사점과 차이점
3.공식 문서:
“nonlocal 문은 나열된 식별자가 가장 가까운 둘러싸는 범위에서 이전에 바인딩된 변수를 참조하도록 합니다. 바인딩의 기본 동작은 로컬 네임스페이스를 먼저 검색하는 것이므로 이 문을 사용하면 캡슐화된 코드가 외부에서 변수를 다시 바인딩할 수 있습니다. 전역(모듈) 범위 외에 로컬 범위.
global 문에 나열된 이름과 달리 nonlocal 문에 나열된 이름은 둘러싸는 범위(새 바인딩이 있는 범위)의 기존 바인딩을 참조해야 합니다. 생성되어야 함을 명확하게 결정할 수 없음).
비로컬 문에 나열된 이름은 로컬 범위의 기존 바인딩과 충돌해서는 안 됩니다."