>  기사  >  백엔드 개발  >  비지역적, 글로벌적 세부 분석

비지역적, 글로벌적 세부 분석

Y2J
Y2J원래의
2017-05-09 15:02:002607검색

이 글은 Python에서 nonlocal 및 global 키워드의 선언 및 분석에 대한 관련 정보를 주로 소개합니다. 글의 소개는 필요한 모든 사람에게 확실한 참고 가치가 있다고 생각합니다. 함께 읽어보세요.

1. Python의 전역 및 비지역 선언

다음 코드는

a = 10 
 
def foo(): 
 a = 100

에서 foo를 실행합니다. ( ) 결과 a는 여전히 10

함수 변수 에 대한 할당입니다. 변수는 항상 로컬 네임스페이스 함수의 경우 전역 문을 사용하여 동작 을 변경합니다.

>>> a 
10 
>>> def foo(): 
...  global a 
...  a = 100 
... 
>>> a 
10 
>>> foo() 
>>> a 
100

이름을 파싱할 때 먼저 로컬 범위를 확인한 후 외부 중첩 함수 레이어에서 정의한 범위를 내부에서 바깥쪽으로 확인합니다. 찾을 수 없으면

에서 검색하세요. 전역 명령 공간 및 내장 네임스페이스.
변수를 레이어별로 조회할 수 있지만 ..python2는 가장 안쪽 범위(로컬 변수)와 전역 명령 공간(gloabl)만 지원합니다. 즉,

Internal function

은 외부 함수에 정의된 지역 변수를 재할당할 수 없습니다. 예를 들어 다음 코드는 작동하지 않습니다

def countdown(start): 
 n = start 
 def decrement(): 
  n -= 1
python2에서는 수정된 값을 목록이나 사전에 넣는 것이 해결책이 될 수 있습니다. , nonlocal 문을 사용하여 수정을 완료할 수 있습니다

def countdown(start): 
 n = start 
 def decrement(): 
  nonlocal n 
  n -= 1

2. Python nonlocal 및 전역 키워드 분석

nonlocal

우선 클로저에 nonlocal 키워드가 정의되어 있다는 점을 분명히 해야 합니다. 다음 코드를 살펴보세요.

x = 0
def outer():
 x = 1
 def inner():
  x = 2
  print("inner:", x)

 inner()
 print("outer:", x)

outer()
print("global:", x)

Result

# inner: 2
# outer: 1
# global: 0

이제 클로저에 nonlocal 키워드를 추가하여 선언합니다.

x = 0
def outer():
 x = 1
 def inner():
  nonlocal x
  x = 2
  print("inner:", x)

 inner()
 print("outer:", x)

outer()
print("global:", x)

Result

# inner: 2
# outer: 2
# global: 0
차이가 보이나요? 이것은 함수 안에 중첩된 함수입니다. nonlocal을 사용하면 해당 변수가 중첩된 함수 inner()에서만 유효한 것이 아니라 전체 대형 함수에서도 유효한 것으로 선언됩니다.



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

global은 올바른 것입니다. 함수 클래스의 변수가 아닌 전체 환경의 변수가 작동합니다.

요약

[관련 추천]

1.

Python 무료 동영상 튜토리얼

2. 파이썬 기본 입문 튜토리얼

3. 파이썬과 데이터 수집의 만남 영상 튜토리얼

위 내용은 비지역적, 글로벌적 세부 분석의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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