일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- git
- Data Structure
- c#
- jupyter lab
- 플러터
- Flutter
- jupyter
- 유니티
- C++
- c# 윈폼
- C언어 포인터
- 깃
- dart 언어
- 구조체
- c언어
- 다트 언어
- Houdini
- Python
- Unity
- github
- vim
- C# delegate
- 포인터
- c# 추상 클래스
- HTML
- 도커
- docker
- c# winform
- Algorithm
- gitlab
Archives
- Today
- Total
nomad-programmer
[Programming/Python] nonlocal 키워드 본문
함수를 정의할 때 함수 내부에서 다른 함수를 정의할 수 있다.
def outer():
a = 10
def inner():
b = 20
코드에서 outer() 함수에서 지역 변수 a가 선언되었고, 중첩된 함수 inner() 함수에 지역 변수 b가 선언되었다. 한 가지 생각해 볼 문제는 inner() 함수에서 outer() 함수의 지역 변수인 a를 변경할 수 있는지이다.
변수 a는 outer() 함수 입장에서는 지역 변수지만 inner() 함수 입장에서는 지역 변수가 아니다. inner() 함수의 지역 변수는 b이다.
a = 1
def outer():
b = 2
c = 3
print(a, b, c)
def inner():
d = 4
e = 5
print(a, b, c, d, e)
inner()
outer() 함수의 공간에 b와 c가 있고 중첩된 inner() 함수의 공간에는 d와 e가 있다. inner() 함수에서는 전역 변수뿐만 아니라 outer() 함수의 공간에 있는 지역 변수에도 접근할 수 있다. 하지만 전역 변수 예제에서 살펴본 것처럼 inner() 함수 안에서 b와 c를 바꾸려고 시도하면 outer() 함수 공간에 접근하는 것이 아니라 inner() 함수 공간 안에 b와 c라는 지역 변수를 생성한다. b나 c는 전역 변수가 아니니 global 키워드를 사용할 수도 없다.
inner() 함수 안에서 b와 c를 변경하려면 어떻게 해야 할까? 이럴때 사용하는 키워드가 "nonlocal" 키워드이다.
def outer():
a = 2
b = 3
def inner():
nonlocal a
a = 100
inner()
print(a, b)
nonlocal 키워드로 inner() 함수 안에서 outer() 함수의 지역 변수 a를 사용할 것이라고 선언하였다.
Comments