static scope에 대해서 공부하는 중에 global은 들어봤는데 nonlocal이라는게 들어본적이 없어서 찾아보았다.
(프언 수업은 정말 역대급으로 생소한것같다. 이전에 이런 내용들을 접해본적이 없어서 꽤나 고생중이다.)
아래 간단한 예제를 보면 바로 이해가 될 것이다. 눈으로 따라가기에는 조금 번거로울 수 있는데 연습장에 조금씩 써보면서 딱 한번만 따라가보면 정확히 이해할 수 있다.
nonlocal: 지역 변수가 아님을 선언
nonlocal이 사용된 함수 바로 한단계 바깥쪽에 위치한 변수와 바인딩을 할 수 있다.
x = 50
def f():
a = 777
def g():
a = 100
def h():
global x
x = 999
nonlocal a
a = 333
h()
print("[Level 2] a = {}".format(a))
g()
print("[Level 1] a = {}".format(a))
f()
print("[Level 0] x = {}".format(x))
위 결과로
333
777
999
가 출력되는 것을 확인할 수 있다.
그리고 참고로 nonlocal은 함수 하나를 정의해놓고 그 안에서 nonlocal을 써서 전역변수에 영향을 주는 것은 불가능하다고 한다.
(여담: 파이썬에서는 정적 스코프만을 지원한다. 동적 스코프는 현대 프로그래밍 랭귀지와는 맞지 않는 면이 있다고 한다. 이부분은 교수님의 말씀인데 글쎄 왜 그런지는 좀더 알아볼 필요가 있겠다. ) -> 맞지 않는다고 하기 보다는 일반적이지 않다는게 좀 더 정확한 표현이라고 할 수 있다.
nonlocal에 대한 내용과 위의 예제는 아래 블로그에서 도움을 얻었다.
감사합니다.
https://devbruce.github.io/python/py-13-global,nonlocal/
반응형
'Python3 > Python3 lang' 카테고리의 다른 글
[Python3] 파이썬 @cache @lru_cache 데코레이터 (0) | 2022.03.13 |
---|---|
[Python3] Python 에서 assert 란? (0) | 2021.12.01 |
[Python3] Python에서의 False와 None은 같은 것인가? (0) | 2021.08.14 |
[Python3] 파이썬 패키지 설치 완료 후에 import 에러 발생할 경우 + could not be resolved Pylance (25) | 2021.08.09 |
[Python3] window10 Ubuntu에서 Miniconda3 설치하기 - 파이썬 가상환경 구축 (0) | 2021.06.27 |