21_알고리즘 문제풀이

ryu·2023년 5월 28일
0

파이썬의 namespace와 scope

namescope

  • 파이썬에서 사용되는 식별자들은 namespace에 저장되어 있음

LEGB Rule

  • 식별자는 아래와 같은 순서로 탐색하며 이러한 규칙을 LEGB Rule이라고 함
    • Local scope: 함수 내
    • Enclosed Scope: 특정 함수의 상위 함수
    • Global Scope: 함수 밖의 변수와 Import 모듈
    • Built-in Scope: 파이썬에 내장된 함수나 속성
  • 함수 내에서 바깥 Scope의 변수에 접근은 할 수 있지만 수정은 할 수 없음

global

  • 사용 시 현재 코드 블록에 적용되며 global 키워드 다음에 나열된 식별자가 전역변수임을 나타냄

  • 여기 나열된 이름은 같은 코드 블럭에서 global 키워드 이전에 등장할 수 없음

    # 예시
    def check_global():
      	global my_name
        
        print(my_name)
        
    # 불가능
    def check_global():
      	my_name = '민수'
        global my_name
  • 선언되지 않은 변수라고 하더라도 global 다음에 나열될 수 있음. 하지만 선언되지 않은 변수를 사용한다면 에러 발생

nonlocal

  • global을 제외하고 가장 가까운 scope의 변수가 연결됨

  • global과 마찬가지로 nonlocal 이후에 나열된 변수들은 같은 코드 블럭에서 nonlocal전에 사용될 수 없음

  • global과는 다르게 사용하지 않는 변수라도 nonlocal 다음에 나열하면 즉시 에러가 발생. 즉 이미 존재하는 변수만 연결 가능

    # 예시
    a = 1
    
    def check_global():
        a = 2
    
        def check_local():
            nonlocal a
    
            print(a)
    
        check_local()
    
    check_global()	# 2

0개의 댓글