일단 아래 코드를 봅시다.
age = 42
name = "Dominic"
places = ["Berlin", "Cape Town", "New York"]
def info():
print("%s is %i years old." % (name, age))
return
info()
보통 python에서 변수는 global, local namespace 두 가지로 나눠질 수 있습니다.
local namespace의 변수는 보통 함수 안에 있는 변수를 말하고,
global namespace의 변수는 함수 밖의 변수를 말합니다.
하지만 왜 위 함수에서는 함수 안에서(local namepsace), 함수 밖에서(global namespace) 정의한 변수들을 사용하는 걸까요?
Python에서는 global namepsace의 변수들을 함수 안에서 아무 처리 없이 사용할 수 있습니다.
하지만 이는 굉장히 헷갈리고 위험한 방법이죠.
만약 함수 안에 변수를 다시 지정한다면 어떻게 될까요?
age = 42
name = "Dominic"
places = ["Berlin", "Cape Town", "New York"]
def info():
name = "Jim"
age = 20
print("%s is %i years old." % (name, age))
return
info()
print(name, age)
이렇게 되면 global 변수를 사용하는 것이 아닌, local 변수를 사용하는 게 됩니다.
하지만 만약 global 변수를 사용하고 싶다면 어떻게 하면 될까요?
age = 42
name = "Dominic"
places = ["Berlin", "Cape Town", "New York"]
def info():
global name
global age
name = "Jim"
age = 20
print("%s is %i years old." % (name, age))
return
info()
print(name, age)
global을 사용하여 변수를 지정해 주면 됩니다.
하지만 global 변수를 읽을 때는 global을 사용하지 않아도 되지만,
다시 global 변수에 다시 값을 쓸 때에는 global로 선정을 해 주어야 합니다.
단, 예외가 있다면, class instance(객체)의 경우에는 global을 지칭하지 않고도
그 안의 변수들을 바꿀 수 있습니다.
class varclass:
var = 3
from lib import varclass
varclass = varclass()
def f():
varclass.var = -1
def f2():
print(varclass.var)
f()
f2() # -1 이 출력됨!
local namespace에서 global 변수를 쓰는 것은 안좋은 practice처럼 보일 수 있습니다.
분명 가독성 측면에서, 그럴 수 있다고 생각은 들지만, 가끔은 모든 함수에서 쓰이는 경우에는 variable을 끊임없이 넘겨주는 것보다
global variable을 constant처럼 쓰는 것은 좋은 사용법이라고 생각합니다.
'Python > Basics' 카테고리의 다른 글
Python3 에서 Dictionary 새로운 값 입력하기 및 수정 (0) | 2021.12.17 |
---|---|
py 파일 pyc로 컴파일 하기 (0) | 2021.03.30 |