try-except는 현업에서만 쓴다라고 할 수 있을 정도로 논하듯 global [var name]도 코딩 테스트에서나 쓰이는 코드 중 하나이다.
갑자기 떠올라서 조금 뒤져본건데, 어쨌든 전역변수에 대한 함수 내 처리 방식이 직관적 이해가 안되는 경우가 정말 간혹 안되는경우가 많아 정리하려고 한다.
계기
탑 다운 방식 피보나치 함수는 이렇게 생겼다.
def fib(n, memo={}):
if n not in memo:
if n <= 1:
memo[n] = n
else:
memo[n] = fib(n-1, memo) + fib(n-2, memo)
return memo[n]
print(fib(10)) # memo가 함수 내부에 존재
멋있다. 근데 memo를 꼭 여기다 때려야하나? 라는 생각을 했다. 그래서 이런 질문을 했다.
memo를 반드시 매개변수로 지정해야합니까? global로 memo를 정의하는 것과 다릅니까?
파일럿 코 : 예 global 괜찮은데, 그걸론 앱 만들지 마세요
total = 0
def a():
global total # 전역 변수 total을 참조
total = 10
a()
print(total) # 출력: 10
global 을 사용하면 전역변수를 직접 수정 할 수 있다.
def a(total):
total = 10
return total
total = 0
total = a(total)
print(total) # 출력: 10
매개 변수로 전달하는 경우에는 return 문을 통한 지정된 값 정정이 아니라면 다소 어렵다.
사소하지만 나중에 이런데서 막히면 현타오니까 점검 겸 적었다.