-
Python 문법 기초 16 - 변수의 접근 순서Python 2022. 10. 22. 16:06
# 변수의 생존 범위 (scope rule) # 변수 접근 순서 : Local > Enclosing function > Global from h5py._objects import nonlocal_close player = '전국대표' # 전역변수 def funcSoccer(): name = '신기해' # 지역변수 player = '지역대표' print(name, player) # 같은 이름의 변수가 있어도 지역변수가 우선! funcSoccer() # print(name) 전역변수로서 선언되지 않기 때문에 읽지 못함. print(player) # 전역 변수에서 찾는다. <console> 신기해 지역대표 전국대표
변수 접근 순서 : Local > Enclosing function > Global
a = 10; b = 20; c = 30 print('1) a:{}, b:{}, c:{}'.format(a, b, c)) def func1(): a = 40 b = 50 c = 100 def func2(): # c = 60 global c nonlocal b # 해당 local 이 아닌 한 단계 위의 local의 활동 전체를 반영. print('2) a:{}, b:{}, c:{}'.format(a, b, c)) c = 60 # local variable 'c' referenced before assignment b = 70 # 위의 nonlocal 의 영향으로 한 단계 위의 local의 변수의 값이 변한다. func2() print('3) a:{}, b:{}, c:{}'.format(a, b, c)) func1() print('함수 수행 후) a:{}, b:{}, c:{}'.format(a, b, c)) <console> 1) a:10, b:20, c:30 2) a:40, b:50, c:30 3) a:40, b:70, c:100 함수 수행 후) a:10, b:20, c:60
print 1번은 전역변수의 참조값을 참조한다.
print 2번은 func2의 함수의 지역변수이므로 지역변수를 참조한다. 다만 global c 라고선언하였기 때문에 전역변수인 c를 가져왔다.
print 3번은 func1의 함수를 가져왔고, func2에서 선언한 nonlocal 로 인하여 fun1의 local의 활동이 변화되었기 때문에 b 는 70을 참조했다.
print 4번은 전역변수의 참조값을 참조했다. 다만 func2에 선언한 global c로 인해 앞으로 전역변수 c는 60으로 고정시켜버렸다. 그러므로 전역변수의 값은 60이 된다.
global, nonlocal 참조
파이썬의 global과 nonlocal 키워드 사용법
Engineering Blog by Dale Seo
www.daleseo.com
'Python' 카테고리의 다른 글
Python 문법 기초 18 - 클로저(closure) (0) 2022.10.22 Python 문법 기초 17 - argument(인자) 와 parameter(매개변수) (0) 2022.10.22 Python 문법 기초 15 - random 함수 (0) 2022.10.22 function(함수) 예제 (0) 2022.10.22 Python 문법 기초 14 - 중첩 함수, 함수의 주소 호출 (0) 2022.10.22