1 분 소요

🚀

알고리즘 문제를 풀다보니 가끔 든 생각이 있다… 전역 변수, 지역 변수 오케이! 근데 함수내부에 함수가 있을 때 바깥 함수의 변수의 변수를 사용하는 방법은 매개변수로 전달하는거 밖에 없나…??


변수의 유효범위 🚧

  • 파이썬에서는 변수가 선언된 위치에 따라 해당 변수가 영향을 미치는 범위가 달라진다. 이를 변수의 유효범위라고 한다.
  • 종류에는 지역 변수(local variable), 전역 변수(global variable)이 있다.

1️⃣ 지역변수(local variable)

  • 일반적으로 함수 내에서 선언 된 변수

def test():
  test_val = '지역 변수'
  print(test_val)

test() # '지역 변수' 출력
print(test_val)
# NameError: name 'test_val' is not defined

  • 함수의 호출이 끝남과 동시에 소멸되므로, 함수 밖에서 접근하려고 하면 선언되지 않은 변수에 접근하는 것으로 인식하여 오류가 발생

  • 함수의 매개변수 또한 함수 내부에서 정의되는 지역 변수

2️⃣ 전역 변수(global variable)

  • 함수 외부에서 선언된 변수

global_val = '전역 변수'

def test():
  print(global_val)

test()  # '전역 변수' 출력
print(global_val) # '전역 변수' 출력

  • 전역 변수와 지역 변수의 이름이 같은 경우에는 둘은 전혀 별개의 변수

global_val = '전역 변수'

def test():
  global_val = '지역 변수'
  print(global_val)

test()  # '지역 변수' 출력
print(global_val) # '전역 변수' 출력

  • global 키워드는 전역 변수의 변수를 함수 내부에서 사용하여 값을 바꾸고 싶을 때 사용
  • 좋은 방법은 아님 전역 변수를 사용하는 다른 함수의 동작을 의도치 않게 바꾸는 결과를 초래할 수 있으므로

global_val = '전역 변수'

def test():
  global global_var
  global_val = '지역 변수'
  print(global_val)

test()  # '지역 변수' 출력
print(global_val) # '지역 변수' 출력

  • 전역 변수가 없는데 global로 전역 변수를 만드는 경우

  • global 변수 선언


def test():
  global gloval_val
  gloval_val = '전역 변수'
  print(global_val)

test()  # '전역 변수' 출력
print(global_val) # '전역 변수' 출력

  • 지역 변수를 불러오기 위해서는 nonlocal 키워드를 사용

def test():
  test_val = '지역 변수'

  def test2():
    nonlocal test_val
    print(test_val)

  test2()

test()  # '지역 변수' 출력

태그:

카테고리:

업데이트:

댓글남기기