파이썬의 지역변수와 전역변수
지역변수는 함수 내부에서만 사용되는 변수
전역변수는 프로그램 전체에서 사용되는 변수
함수 내부에서 전역변수임을 명시하고 싶으면 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값
참고
'프로그래밍 > Python' 카테고리의 다른 글
파이썬 객체의 3가지 특징 상속성(inheritance), 다형성(polymorphism), 가시성(visibility) (0) | 2022.02.20 |
---|---|
파이썬 object의 magic method (0) | 2022.02.19 |
프로그래밍을 한다면 꼭 알아야하는 파일형식 csv, html, xml, json (0) | 2022.02.14 |
파이썬 프로그래밍 정규표현식 사용하는법 (0) | 2022.02.12 |
파이썬에서 파일을 처리하는 방법 (0) | 2022.02.09 |