참조 : https://dojang.io/mod/page/view.php?id=2364

전역변수 지역변수

함수를 포함하여 스크립트 전체에서 접근할 수 있는 변수를 전역변수 (global variable)라고 부른다

g_val = 'g_val'
def v1():
    global gloval
    gloval = 'gloval'
    loval = 'local-val'
    print()
    print(g_val)
    print(gloval)
    print(loval)

v1()
# g_val
# gloval
# local-val

g_val은 전역변수로 선언되어있는 상태에서 v1이 실행, v1에서 gloval이라는 전역변수가 선언되고,

loval이라는 지역변수가 선언되었음

g_val = 'g_val'
def v1():
    global gloval
    gloval = 'gloval'
    loval = 'local-val'
    print()
    print(g_val)
    print(gloval)
    print(loval)

def v2(g_val, gloval):
    loval = 'v2 loval'
    print()
    print(g_val, gloval)
    print(loval)

v1()
v2(g_val, gloval)
'''
g_val
gloval
local-val

g_val gloval
'''

v1을 실행한 후, v2를 실행하였다.

g_val에 'g_val'이 담긴 상태에서, v1을 통해 gloval이 전역변수로 선언되었으며, 그렇기에 함수밖에서 v2로 gloval을 파라미터로 넘겨줄 수 있었다.

def argv2(**args):
    args['gloval'] = 'ddd'
    print()
    print(args)
    print(args['gloval'])
    print(gloval)
'''
{'gloval': 'ddd', 'dfdf': 'fdfd'}
ddd
gloval
'''

args로 받게되면, 딕셔너리로 담기는데, 이 때 여기서 gloval을 변경했을때는 어떨까? 고쳐보았다.

그 결과 args로 담겨진 gloval은 변경해도, 전역변수의 변경이 되지 않는것을 볼 수 있었다.

결국 마지막 print(gloval) 로, gloval을 확인해본 결과, 바뀌지않았다.

그냥 dictionary에서 Key = gloval 의 값이 바뀌어버린것으로만 보면 될것같다.

def v3(g_val, gloval):
    g_val = '333 changed'
    gloval = '33 changed groval'
    print()
    print(g_val, gloval)

v1()

v3(g_val, gloval)    ## 함수에서 전역변수를 받아서 변경해봄
print()
print(g_val, gloval)

'''
g_val
gloval
local-val

333 changed 33 changed groval

g_val, gloval
'''

v3에서 파라미터로 받은 변수를 변경한다면 어떻게될지 테스트해보았다.

g_val과, gloval을 둘 다 변경시켜서 v3내에서 출력한 결과 바뀌어서 출력된다.

그러나 외부에서 다시 g_val, gloval을 출력해본결과 바뀌지 않았다.

def v4():
    global g_val
    print(g_val)
    g_val = 'v4_gval'

v4()
print(g_val)
'''
g_val
v4_val
'''

이번엔 v4함수를 만들어서 , 그 안에서 global로 g_val을 불러오고나서 변경시켜보았다

잘 변경된다!

이로써 배우게 된 점 ....

전역변수를 설정하는것에 있어서 조심조심히 사용해야할것이며, 그것을 어떠한 함수 내에서 사용하면서 변경할 경우, 왠만하면 직접참조하지않는것이 좋을것같다. 정...변경이 필요하다면 return을 받아서 그걸 밖에서 저장하는 방식이 일관성있게 더 낫지않을까..싶다.
정말 부득이하게 어떠한 함수 내에서 전역변수를 변경하거나, 선언할 일이 생긴다면 global 키워드를 사용해야한다!

'Python' 카테고리의 다른 글

Python Decorator에 대하여 @ 데코레이터  (0) 2021.06.14
lambda , filter, map  (0) 2021.05.11
Python Generator 제너레이터, yield  (0) 2021.05.11
Object-Oriented Programming  (0) 2021.05.11

+ Recent posts