2020년 8월 8일 토요일

global variable test in Python(Python에서 전역 변수 사용)

 

python 에서 전역 변수를 사용하는 방법


global 키워드를 사용합니다. 사용하지 않았을때는 지역 변수가 됩니다. python에서는 다른언어와 다르게 변수의 명시적인 선언이 없다보니 함수내에서 전역 변수인줄 알고 사용했는데 지역 변수로 동작하는 경우가 있어서 이를 눈치채지 못하고 디버깅이 어려운 경우가 있습니다.

아래와 같은 예에서 setgvalue 함수내에 g_value는 지역 변수가 됩니다. 그래서 아래와 같이 전역 변수 값을 변경하는것처럼 보여도 실제로는 지역변수의 값이 변경되어 함수가 종료되면 전역변수의 g_value의 값은 변경되지 않습니다.

g_value = "init"
def setgvalue(val):
	g_value = val
	print("setgvalue:out",g_value)

다른 파일에 있는 전역 변수를 import 하는 경우는 어떨까요?


예제를 만들어 봤습니다.


결론 : global이 필요 없습니다.

global globaltest2.g_value 이런식으로 표현하면 에러가 발생합니다.


globaltest2.py

g_value = "init"

# 변경안됨 
def setgvalue(val):
	#print("setgvalue:in",g_value) # error
	g_value = val
	print("setgvalue:out",g_value)

# 변경가능
def setgvalue2(val):
	global g_value
	print("setgvalue2:in",g_value)
	g_value = val
	print("setgvalue2:in",g_value)



globaltest.py

import globaltest2

def test():
	print("1:",globaltest2.g_value) # init

	globaltest2.g_value = "globaltest"
	print("2:",globaltest2.g_value) # globaltest
	# global keyword 없어도 변경됨

	globaltest2.setgvalue("setgvalue")
	print("3:",globaltest2.g_value) # globaltest

	globaltest2.setgvalue2("setgvalue2")
	print("4:",globaltest2.g_value) # setgvalue2

test()



python globaltest.py


result

1: init
2: globaltest
setgvalue:out setgvalue
3: globaltest
setgvalue2:in globaltest
setgvalue2:in setgvalue2
4: setgvalue2




댓글 없음:

댓글 쓰기