파이썬에서 변수에 값을 바인딩하거나 변수의 값을 참조하는 경우 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가 된다.
'Programming > Python' 카테고리의 다른 글
python 다중 할당 동작방식 (0) | 2022.03.23 |
---|---|
python typing optional (0) | 2022.03.23 |
python 함수의 생성과 호출 (0) | 2022.01.11 |
python 비교 연산자와 is 연산자 (0) | 2022.01.11 |
#7 Python 코딩테스트 최단 경로 알고리즘 (0) | 2021.11.17 |
댓글