파이썬의 범위(scope)
함수는 코드 내부에 local scope을 생성하고. 그 외는 global scope으로 구분된다.
global scope은 코드 어디에서든 참조할 수 있는 공간이고, local scope은 함수 내부에서만 참조 가능한다.
변수 수명주기 (lifecycle)
변수는 각자의 수명주기가 존재한다.
- built-in scope
파이썬이 실행된 이후부터 영원히 유지된다.
- global scope
모듈이 호출된 시점 이후, 인터프리터가 끝날 때까지 유지된다.
- local scope
함수가 호출될 때 생성되고 함수가 종료될 때까지 유지된다.
변수의 유효 범위(variable scope)
변수가 선언된 위치에 따라 해당 변수가 영향을 미치는 범위가 달라진다. 해당 범위를 변수의 유효범위라고 한다.
1.지역 변수(local variable)
함수 내에서 선언된 변수로 함수가 실행되는 동안만 사용할 수 있다.
def func():
num=10 #지역변수
print(num)
func() #10
print(num) #NameError: name 'num' is not defined
num이라는 변수를 함수 내에서 선언했다.
이 변수는 함수 내에서만 유효한 지역변수이다.
함수 밖에서 print(num)으로 확인했을 때 정의되지 않은 변수라고 오류가 발생한다.
2. 전역 변수(global variable)
num = 10
def func():
num=5
print(num)
func() #5
print(num) #10
num을 함수밖에서 선언하고, 함수에서 num을 수정하고 출력한다.
함수를 실행하면 함수내에서 수정된 값이 출력되지만 다시 num을 출력하면 함수의 영향은 없이 선언된 값이 나온다.
함수 내에서는 바깥 scope의 변수에 접근할 수 있지만, 수정은 할 수 없다.
global
num = 10
def func():
global num #num은 새로 선언하는 local변수가 아닌 global 변수이다.
num=5
print(num)
func() #5
print(num) #5
함수 내부에서 global 변수를 수정하고 싶을 때는 global 변수명으로 선언하면 된다.
새로운 지역변수를 생성하지 않고 global 변수를 이용한다는 의미이다.
하지만, 전역변수를 변경하고 싶을 때는 이런 방법보다 함수의 argument로 넘겨서 리턴값을 이용하는 것을 권장한다.
LEGB 규칙
파이썬에서 사용되는 식별자(이름)은 이름공간(namespace)에 저장되어 있다.
변수의 값을 참조할 때 LEGB Rule을 따르며 Local scope, Enclosed scope, Global scope, Built-in scope 순으로 이름을 찾아나간다.
L | Local Scope, 함수 내부 (지역 범위) |
E | Enclosed Scope, 내부함수에서 자신의 외부 함수 (지역범위 한단계 위의 범위) |
G | Global Scope, 함수 바깥 (최상단 범위) |
B | Built-in Scope, 파이썬 내장 함수 (정의하지 않고 사용할 수 있는 모든 것) ex. print(), sum() |
'Language > Python' 카테고리의 다른 글
파이썬 - 재귀 함수 (recursive function) (0) | 2022.07.21 |
---|---|
파이썬 - lambda 함수 (0) | 2022.07.21 |
파이썬 함수 - map, filter, zip (0) | 2022.07.21 |
파이썬 : 함수 정의, 호출 / 매개변수, 인자 / 패킹, 언패킹 / 가변인자, 가변키워드인자 (0) | 2022.07.21 |
파이썬 Falsy / Truthy (0) | 2022.07.21 |