파이썬의 지역변수와 전역변수

지역변수는 함수 내부에서만 사용되는 변수

 

전역변수는 프로그램 전체에서 사용되는 변수

 

함수 내부에서 전역변수임을 명시하고 싶으면 global문을 사용함

 

 

global 변수 x=10은 test함수내에서 print(x)해도 여전히 10을 가리키므로 10을 출력

 

함수 내 t=20은 지역변수이므로 함수내에서 20을 출력하고 밖으로 나가면 소멸

 

따라서 밖에서 사용하면 print(t)하면 에러남

 

x=10을 test함수에 전달하면서 t가 10을 가리키는데 t=20으로 재할당하면서 새로운 변수가 생성되는거(call by object reference)

 

 

특별히 명시하지 않으면 변수명이 같아도 함수내에선 지역변수 함수밖에선 전역변수 원칙

 

f()에 의해 지역변수 s 값이 먼저 출력되고 이 s는 밖에서는 소멸

 

print(s)는 전역변수 s값을 이용하여 출력

 

 

함수내부에서 global을 명시하면 함수 내부의 s가 전역변수임을 명시한다

 

이미 전역변수 s=’i love IU’라고 할당된 상태

 

왜냐하면 def f():가 먼저 수행되는 것이 아니고

 

def f():는 일단 메모리에 올린 다음에 s='i love IU'를 먼저 수행함

 

s를 할당하고 나서 f() 함으로써 전역변수 s=’I love taeyeon’으로 재할당 시킴 그러면서 이 값을 프린트

 

당연히 전역변수 s값은 여전히 ‘I love taeyeon’이므로 밖 print(s)는 이 값을 출력

 

----------------------------------------------------------------------------------------------------------------

 

함수 밖에서 global문을 명시하면 어떤 함수 안에서도 global이라고 생각할 수 있지만

 

함수 안에서 이를 수정하려면 함수 안에서도 global이라고 명시해줘야한다

 

global a

a = 10

def test():
    
    global a

    a = 1

    b = 2

    return a + b


print(test())
print(a)

3
1

 

밖에서 global로 명시하고 a=10을 할당해도 함수 안에서 global로 명시한 a=1로 수정하면

 

함수 밖에서도 a = 1로 된다

 

반면

 

global a

a = 10

def test():

    a = 1

    b = 2

    return a + b


print(test())
print(a)

3
10

 

함수 밖에서 global로 명시한 a=10이 계속 전역변수여서 함수 안에서도 전역변수하고 생각할 수 있지만

 

함수 안에서도 global로 명시하지 않으면 test 함수 안에서는 local로 취급되어 a=1로 잠깐 사용되고 a=1은 소멸

 

 

-----------------------------------------------------------------------------------------------------------------------------------------------------------

 

 

 

 

전역변수 a=5,b=7 calculate 안에 넣어서 x,y가 각각 5,7을 가리킨다

 

이것을 이용해서 calculate안에서 새로운 지역변수 total 할당

 

함수 내에서 a,b,a+b는 전역변수 a,b를 이용해서 계산, total은 x+y로 계산한 지역변수로 계산하여 프린트,

 

여기서 지역변수 total값을 출력함

 

마지막 프린트문에서 total은 전역변수 total=0을 사용

 

sum=calculate(a,b)로 리턴된 값, 즉 x+y로 계산한 지역변수 total값

 

 

 

 

 

 

참고

 

https://www.infoking.site/64

 

파이썬 global 전역변수 사용방법과 사용예 알아보기!

프로그래밍 언어에서 변수를 분류하는 방법은 여러가지가 있다. 그 중에 하나로 전역변수와 지역변수의 개념이 있다. 일반적으로 전역변수는 프로그램에 혼란을 주기 때문에 사용을 권장하지

www.infoking.site

 

TAGS.

Comments