728x90
반응형
def A():
x = 10 # A의 지역 변수 x
def B():
print(x)
B()
A()
> 10
: 해당 함수 호출시 동일 지역이었던 변수는 가져와서 쓰기 ok
def A():
x = 10 # A의 지역 변수 x
def B():
x = 20 # x에 20 할당
B()
print(x) # A의 지역 변수 x 출력
A()
> 10
: A함수에서 정의하는 x와 B함수에서 정의하는 x가 다름.
각각의 지역변수 (다른 두 지역의 변수)
def A():
x = 10 # A의 지역 변수 x
def B():
nonlocal x # 현재 함수의 바깥쪽에 있는 지역 변수 사용
x = 20 # A의 지역 변수 x에 20 할당
B()
print(x) # A의 지역 변수 x 출력
A()
> 20
: 해당 함수 바로 바깥에서 정의한 것을 가져와 수정 (nonlocal)
같은 x를 가리킴 = 변수 동기화
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
: nonlocal은 현재 함수의 바깥쪽에 있는 지역변수를 찾을 때, 가장 가까운 함수부터 먼저 찾는다.
nonlocal x는 가장 가까운 함수 B의 x인 20을 가리키고,
nonlocal y는 함수 A의 y인 100을 가리킨다.
global
x = 1
def A():
x = 10
def B():
x = 20
def C():
global x
x = x + 30
print(x)
C()
B()
A()
> 31
: global 키워드를 사용하면 함수가 몇 단계든 상관없이 무조건 전역변수를 사용하게 된다.
전역변수 x = 1
안써도 되는 경우?
728x90
반응형
'Python' 카테고리의 다른 글
[Python] LabelEncoder VS OrdinalEncoder (0) | 2024.11.06 |
---|---|
[Python] 파이썬 기초 자료형 Tuple, Set 비교 (0) | 2024.08.20 |
주피터 실행결과 출력문 생략 (0) | 2024.08.01 |
[Python] sklearn 설치하기 (0) | 2024.08.01 |
VScode 에서 주피터 노트북 가상환경 (1) | 2024.08.01 |