python global 키워드 사용 질문합니다. global 선언하지 않았는데, 왜 함수 외부변수를 참조할 수 있는건지

조회수 823회

재귀함수 이용해 피보나치 수열 구현하는 걸 연습중인데

dic = {1: 1,
       2: 1}

def pibo(n):
    if n in dic:    
        return dic[n]    
    else:
        out = pibo(n-1) + pibo(n-2)
        dic[n] = out
        return out

왜 여기서 global dic 을 하지 않아도 함수 내부에서 외부 변수를 참조할 수 있는지 궁금합니다.

1 답변

  • 좋아요

    2

    싫어요
    채택 취소하기

    파이썬에서 함수 외부에서 선언되어 있는 변수를 글로벌 변수(전역 변수)라고 합니다. 글로벌 변수는 함수 외부 또는 내부에서 마음대로 접근할 수 있습니다.

    질문 코드에서 dic이 pibo 함수 밖에서 선언되어 있기 때문에 글로벌 변수이고, 따라서 pibo 내에서 이 글로벌 변수 dic에 접근할 수 있습니다.

    만약에 아래와 같이 pibo 안에 dic이 한번더 선언되어 있었다면 내부에서 선언된 것은 지역변수이고 그 아랫줄의 if n in dic의 dic은 그 지역 변수를 나타냅니다.

    dic = {1: 1,
           2: 1}
    
    def pibo(n):
        dic = {1: 0,
               2: 1}
    
        if n in dic:    
            return dic[n]    
        else:
            out = pibo(n-1) + pibo(n-2)
            dic[n] = out
            return out
    

    global 키워드는 아무대나 붙이는 것이 아니고 (1) 함수 내에서 전역 변수를 선언할 때 함수 내에서 붙이고, (2) 전역 변수의 내용을 함수 안에서 수정하고 싶을 때 함수 내에서 붙여서 사용하는 키워드입니다.

    • (•́ ✖ •̀)
      알 수 없는 사용자

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)