파이썬/기본

[파이썬] 변수의 범위

caramel-bottle 2023. 9. 12.

스코프

변수의 범위는 해당 변수가 프로그램 내에서 참조되고 변경될 수 있는 영역을 의미한다.

  • local
  • enclosing
  • global
  • built-in

local

# local
def local_example():
  local_var = "로컬 변수"
  print(local_var)

local_example()
# print(local_var) # NameError: name 'local_var' is not defined

로컬 변수는 지역 변수라고도 부른다. 지역이란 말 대로 메서드 내에 선언되어 메서드 내에서만 사용하고 변경할 수 있다. 

메서드 밖에서 접근을 한다면 위처럼 선언되지 않은 변수라는 오류를 보게 된다.


enclosing

# enclosing
def outer_function():
  enclosing_var = "둘러싼 범위 변수"
  num = 10

  def inner_function():
    print(enclosing_var)
    num = 20

  inner_function()
  print(num)
  
outer_function()

# print(enclosing_var) # NameError: name 'enclosing_var' is not defined

메서드 내에 메서드가 선언되어 있는 구조이다. 상위 메서드에 선언된 변수는 하위 메서드에서 사용할 수 있다. 하위 메서드 입장에선 enclosing_var 변수가 전역 변수라고 생각해도 될 것 같다.

상위 메서드 num 변수는 하위 메서드에서 변경이 불가능하다.

 

또한 enclosing 변수를 메서드 외부에서 접근하면 에러가 발생한다.


global

# global
global_var = "I'm a global variable"

def test_global_scope():
  print(global_var)

test_global_scope()

 

global_var = 10
print(global_var)

def modify_global():
  global global_var
  global_var = 20

modify_global()
print(global_var)

global 변수는 전역 변수라고도 부른다. 선언된 변수는 어디서든 사용이 가능하다. 메서드 내에서 사용은 되지만 변경은 불가능하다.

우리는 global 키워드를 사용하여 메서드 내에서도 선언을 해주어야 한다. 선언된 메서드 내에서는 사용, 변경이 가능하다.


Built-in

Built-in scope는 파이썬의 내장 함수와 모듈들이 속하는 범위이다.

 

print(), len() 같은 함수들이 있다.


변수의 범위 탐색 순서

  1. Local scope
  2. Enclosing scope
  3. Global scope
  4. Built-in scope

지역 범위에 동일한 이름의 변수가 없으면 -> 둘러싼 범위를 확인하고 -> 전역 범위 -> 내장 범위

변수의 범위를 이해하고 관리하는 것은 코드의 가독성과 유지 보수성을 높이고, 예기치 않은 오류를 방지하는 데 중요하다.

 


 

'파이썬 > 기본' 카테고리의 다른 글

[파이썬] 재귀 호출  (0) 2023.09.14
[파이썬] 콜백함수 & 람다함수  (0) 2023.09.14
[파이썬] 함수와 메모리  (0) 2023.09.11
[파이썬] None  (0) 2023.09.11
[파이썬] 사용자 정의 함수  (0) 2023.09.11

댓글