# outer(), inner() 함수 입장에서 전역(global) 범위
a = 1
def outer():
# outer() 함수 입장에서 지역(local) 범위
# inner() 함수 입장에서 비지역(nonlocal) 범위
def inner():
# inner 함수 입장에서 지역(local) 범위
outer()
전역 변수는 어느 지역 내에서든 접근 가능
> 접근
globalVar = "전역변수"
def scopeCheck():
print(globalVar) ### 가능
def scopeCheck2():
print('두번째함수 내에서:' ,globalVar) # 가능
scopeCheck2()
scopeCheck()
> 변경은 불가
globalVar = "전역변수"
def scopeCheck():
print(globalVar) ### 불가능!
# UnboundLocalError: local variable 'globalVar' referenced before assignment
globalVar = "전역변수 변경"
scopeCheck()
같은 변수명을 지역함수에서 새롭게 만든 셈이기 때문에 그 함수에서만 적용된다. 할당 이전 print라 에러.
변경하려면 변경하는 그 함수내에서 global 선언해줘야함
globalVar = "전역변수"
def scopeCheck():
global globalVar
print(globalVar) # "전역변수"
globalVar = "전역변수 변경"
print(globalVar) # "전역변수 변경"
scopeCheck()
globalVar = "전역변수"
def outer():
outerlocal = "바깥쪽 지역변수"
def inner():
print(outerlocal) ###가능 (바깥 지역변수에 접근 가능)
print(globalVar) ###가능 (전역변수에 접근 가능)
outerlocal = "바깥쪽 지역변수 변경" ### 불가능!!!!
innerlocal = "안쪽 지역변수"
inner()
print(innerlocal) ### 불가능!!! not definded
outer()
inner함수 기준으로는 innerlocal은 지역변수, outer함수 내 변수인 outerlocal은 nonlocal변수이다.
nonlocal변수 즉 바깥함수의 변수에 접근만 가능
전역변수에 접근하려면 global 선언
바깥쪽 지역변수에 접근하려면 nonlocal 선언
지역 변수를 바깥쪽 지역 혹은 전역에서 쓰려고 한다면 그 변수가 선언 된 곳에서 global