반응형

출처:http://egloos.zum.com/mcchae/v/11025548

 

파이썬에서도 다른 언어처럼 global 개념이 있지만 약간은 틀리더군요.


다음을 보겠습니다.

GV=10
def gTestA():
i = GV
j = GV+1
print i + j

위 상태에서

gTestA()

를 수행하면 
21
결과를 보여주고 정상 종료 됩니다.

클래스도 보겠습니다.

GV=10
class myClass:
myGV = GV
def __init__(self):
self.myGV = 5
def mA(self):
i = self.myGV
j = myClass.myGV
print i + j
my = myClass()
my.mA()
15

즉, namespace에서 모듈의 global 은 어디서든지 read-only 개념으로 참조가 가능합니다.

하지만 아래의 경우를 보겠습니다.

GV=10
def gTestB():
GV += 1
print GV
gTestB()

수행을 하면,

Traceback (most recent call last):
  File "/home/toor/workpy/SMCLinux/test/global_test.py", line 5, in <module>
    gTestB()
  File "/home/toor/workpy/SMCLinux/test/global_test.py", line 3, in gTestB
    GV += 1
UnboundLocalError: local variable 'GV' referenced before assignment

와 같은 오류가 발생하는 군요.

즉, readonly가 아니라 참조를 하려는데 로컬 변수 사전에서 못 찾는다는 것이겠지요.

GV +=1 윗줄에
global GV
라는 것을 주면 global 사전에 GV가 추가되고, 글로벌 변수를 이용하여 
값을 변경하는 것도 가능합니다.

GV=10
def gTestB():
global GV
GV += 1
print GV
gTestB()

어느분께는 도움이 되셨기를 바랍니다.

 

반응형

+ Recent posts