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
댓글 없음:
댓글 쓰기