Python 3의 "비로컬" 이해
기존 언어와 달리 Python에서는 중첩 함수가 외부 범위에 정의된 변수에 액세스할 수 있습니다. 그러나 중첩된 함수 내에서 선언되지 않은 변수(즉, 비지역 변수)에 액세스하면 예기치 않은 동작이 발생할 수 있습니다.
"nonlocal" 키워드
In Python 3에서는 "nonlocal" 키워드를 사용하면 중첩 함수 내에서 외부 범위에 선언된 변수를 수정할 수 있습니다. "nonlocal"을 사용하면 수정 중인 변수가 로컬이 아니며 외부 범위에 속한다고 선언합니다.
"nonlocal" 작동 방식
다음을 고려하세요. 사용하지 않고 다음 코드 "nonlocal":
x = 0 def outer(): x = 1 def inner(): x = 2 print("inner:", x) inner() print("outer:", x) outer() print("global:", x)
출력:
inner: 2 outer: 1 global: 0
이 예에서 내부 함수의 변수 x는 외부 함수의 변수 x를 숨기고 값 2가 다음에 할당됩니다. x 내부 함수 내. 외부 함수의 변수 x는 영향을 받지 않습니다.
"nonlocal" 사용
내부 함수에서 외부 함수의 변수 x를 수정하려면 "nonlocal"을 다음과 같이 사용할 수 있습니다. 다음:
x = 0 def outer(): x = 1 def inner(): nonlocal x x = 2 print("inner:", x) inner() print("outer:", x) outer() print("global:", x)
출력:
inner: 2 outer: 2 global: 0
이 경우 "nonlocal" 키워드를 사용하면 내부 함수가 외부 함수의 변수 x에 액세스하고 수정할 수 있습니다. 결과적으로 외부 함수의 x 값은 2로 변경됩니다.
"global"과의 비교
"nonlocal"과 달리 "global" 키워드는 전역 범위에 속하는 변수를 나타냅니다. "전역"을 사용하면 동일한 이름을 가진 다른 지역 변수가 있는지 여부에 관계없이 내부 함수의 변수가 전역 변수에 바인딩됩니다.
x = 0 def outer(): x = 1 def inner(): global x x = 2 print("inner:", x) inner() print("outer:", x) outer() print("global:", x)
출력:
inner: 2 outer: 1 global: 2
따라서 외부 범위에서 선언된 변수를 수정하려는 경우에는 "nonlocal"을 사용해야 하고, 전역 범위에서 변수에 접근할 경우에는 "global"을 사용해야 합니다.
위 내용은 변수 수정에서 Python의 `nonlocal` 키워드는 `global`과 어떻게 다릅니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!