본문 바로가기
Programming/Python

python의 LEGB 규칙

by 데이터현 2022. 1. 11.

파이썬에서 변수에 값을 바인딩하거나 변수의 값을 참조하는 경우 LEGB 규칙을 따른다.

1. L - Local의 약자로 함수 안을 의미한다.

2. E - Enclosed function locals의 약자로 내부 함수에서 자신의 외부 함수의 범위를 의미한다.

3. G - Global의 약자로 함수 바깥 즉, 모듈 범위를 의미한다.

4. B - Built-in의 약자로 open, range와 같은 파이썬 내장 함수들을 의미한다.

 

a = 10

def test():
    a = 20
    print(a)

test()

위 코드에서 test 함수가 호출되게 되면 a라는 변수가 바인딩하는 값을 출력하게 된다.

즉 변수가 바인딩하는 값을 참조해서 출력하고자 하므로 LEGB순으로 탐색한다.

test 함수 안이 바로 local 영역이고 a 는 local 안에 존재하므로 local 영역의 a라는 변수가 바인딩하는 값인 20이 화면에 출력된다.

 

a = 10

def test():
    print(a)

test()

위와 같은 경우는 L과 E 모두 없기 때문에 Global에서 찾게 되어 10이 출력된다.

 

a = 10

def test():
    a = 20
    print(a)

test()
print(a)

test 함수 내에서 a가 바인딩되어 있기 때문에 20이 출력되고 test 함수 밖에서 10으로 바인딩되어 있는 a가 출력됨

 

a = 1 # global
def outer():
    b = 2 # outer 함수 기준으로는 local, inner 함수 기준으로는 enclosed
        def inner():
            c = 3 # inner 함수 기준으로는 local
    print(a, b, c)
inner()

b의 경우가 inner 입장에서는 enclosed(에워싼) function locals가 된다.

댓글