[코딩도장] 파이썬 함수 안에서 함수 만들기 요약본
in Development on Python
nonlocal
이라는 생소한 것이 나와서, 코딩도장 강의를 보고 파이썬의 함수 안에서 함수 만들기 요약하려 한다.
[코딩도장] 33.2 함수 안에서 함수 만들기
def 함수이름1():
코드
def 함수이름2():
코드
33.2.1 지역 변수의 범위
- 지역 변수 hello는 def 안까지 접근 할수 있다.
def print_hello():
hello = 'Hello, world!'
def print_message():
print(hello)
print_message()
print_hello()
Hello, world!
33.2.2 지역 변수 변경하기
- 겉으로 보기에는 바깥쪽 함수 A의 지역변수 x를 변경하는 것 같지만
- 실제로는 안쪽 함수 B에서 이름이 같은 지역 변수 x를 새로 만들게 됨.
def A():
x = 10 # A의 지역 변수 x
def B():
x = 20 # x에 20 할당
B()
print(x) # A의 지역 변수 x 출력
A()
10
33.2.2(수정) 지역 변수 변경하기
- 함수의 바깥쪽에 있는 지역 변수 값을 변경하려면
nonlocal
키워드를 사용하면됨.
def A():
x = 10 # A의 지역 변수 x
def B():
nonlocal x # 현재 함수의 바깥쪽에 있는 지역 변수 사용
x = 20 # A의 지역 변수 x에 20 할당
B()
print(x) # A의 지역 변수 x 출력
A()
20
33.2.3 nonlocal이 변수를 찾는 순서
- (중요)
nonlocal
은 현재 함수의 바깥쪽에 있는 지역 변수를 찾을 때 가장 가까운 함수 부터 먼저 찾음 - 실무에서는 여러 단계로 함수를 만들 일 없음. 함수마다 이름이 같은 변수보단 다르게 쓰는게 좋음.
def A():
x = 10
y = 100
def B():
x = 20
def C():
nonlocal x
nonlocal y
x = x + 30
y = y + 300
print(x)
print(y)
C()
B()
A()
50
400
33.2.4 global로 전역 변수 사용하기
- 함수가 몇 단계든 상관없이
global
키워드를 사용하면 무조건 전역 변수를 사용 global
전역 변수는 코드가 복잡해졌을때, 변수의 값을 어디서 바꾸는지 알기가 힘들므로 가급적 사용하지 않는 것을 권장.
x = 1
def A():
x = 10
def B():
x = 20
def C():
global x
x = x + 30
print(x)
C()
B()
A()
31
참고 : 코딩도장-Python