ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Python - Variable Scope
    Python 2021. 1. 6. 23:32

    Variable Scope

     

     

    파이썬의 변수는 해당 변수가 선언된 범위 내의 범위에서만 유효하다. 이를 Scope라고 부른다.

     

    Local Scope, Enclosed Scope, Global Scope 그리고 Built-in Scope 이렇게 네가지 종류의 Scope가 있다.

    각각의 Scope들은 아래와 같은 범위를 가진다.

    각각의 Scope들에 대해 알아보자.

    Scope

    Local Scope

    Local Scope는 현재 컴퓨터가 실행중인 함수의 Scope이다.

    변수를 찾을 때, 가장 먼저 해당 변수가 Local Scope에 존재하는지 확인한다. 

     

     

    locals()로 현재 local variable을 확인할 수 있다.

    x = 1
    def func():
        x = 2
        print(locals())
    func()

    위의 코드를 실행하면, func함수가 실행되고, 함수 내의 local variable들을 출력해준다. 함수 밖에서 x가 이미 선언되어 있더라도, 함수 안에서 다시 선언되었음으로, local variable인 x는 2의 값을 가진다.

     

     

     

    함수 외부에서 local variable을 확인해보자. 

    x = 1
    print(locals())
    

     

     

    함수가 실행되고 있지 않기 때문에 globals()와 같은 출력을 볼 수 있다.

     

     

    Enclosed Scope

    Local Scope내에서 변수를 찾지 못하면, 다음으로 Enclosed Scope에서 변수를 찾는다.

    아래의 코드에서 y가 Enclosed Scope에 속하는 변수이다.

    function2내의 Local Scope에서 y를 찾지 못했을 때, 다음 순서로 해당 함수 바깥의 함수에서(Enclosed Scope에서) y를 탐색한다.

    def function1():
        def function2():
            x = y
            print(x)
            return
        y = 1
        function2()
    
    function1()
    
    #output : 1

     

     

    Global Scope

    Enclosed Scope내에서도 변수를 확인하지 못했다면, 다음으로 Global Scope에서 변수가 존재하는지 확인한다.

    파이썬에서 Global Scope에 변수를 선언할 수 있다. 하지만, Global Variable들을 남용하게 되면, 변수명이 겹쳐 부작용이 생길 수 있다. 예를 들어서 map이라는 global 변수를 선언하면, Built-in Scope에 존재하던 map은 더이상 접근 불가능해진다.

     

    locals()와 유사하게 globals()로 global scope내의 변수들에 접근할 수 있다.

    x = 1
    print(globals())
    

     

    아래의 출력에 'x'외에도 다양한 항목들이 포함되어있음을 확인할 수 있다. 다음 포스팅에서 각각의 역할을 확인해보자.

     

     

    Built-in Scope

    가장 넓은 범위를 가지는 영역이다. 

    우리는 코드를 작성할 때, print와 같은 함수를 import하고 사용하지 않는다. 이렇게 interpreter가 실행될 때, 함께 로드되는 변수들이다.

    Built-in Scope영역의 변수들은 따로 선언하지 않아도 코드상 모든 영역에서 접근가능하다.

     

     

     

    틀린 부분이 있을 수 있습니다. 피드백 주시면 고치도록 하겠습니다! 감사합니다.👍

    [꼭 다시 풀어보기]

     

     

     

     

    reference

    'Python' 카테고리의 다른 글

    cPython [Deep Dive to Object] - 1  (0) 2021.04.21
    Python - Call by Object Reference  (1) 2020.12.26
    Python - 함수에 배열을 인자로 전달할 때  (0) 2020.12.23
    Python?  (0) 2020.12.21
Designed by Tistory.