udemy.py_Section 6 - (9) Nested Statements and Scope

Gomi_kery·2022년 9월 19일
0

udem.py

목록 보기
28/28
post-thumbnail

변수와 Scope

  • 변수를 정의할 때, 정의된 변수가 사용할 수 있는 프로그램의 영역이 존재.
  • 이 프로그램의 영역을 Scope라고 부르며, 변수명이 코드의 다른 부분에서 보이게 할지 결정.
  • 코드에서 참조하는 변수가 어떤 것인지 이해하고 결정하는 LEGB규칙을 갖고 있음.

LEGB Rules

  • 변수에 값을 바인딩하거나 변수의 값을 참조하기 위해 사용되는 우선순위
  • 동일한 이름의 변수가 함수 내부, 함수(함수()) 있더라도
  • 각 변수는 상위 Scope에 영향을 주지 못함.
약자full namemeans
LLocal함수 안(내부)
EEnclosing function locals내부 함수에서 자신의 외부 함수의 범위
GGlobal (Module)함수 바깥 == 모듈 범위
BBuilt-in (Python)파이썬 내장 함수들

중첩 함수

  • 함수 내에 함수가 정의된 것.
  • Enclosing function local를 이해하기 위해서 필요.
  • 부모 함수의 변수를 자유롭게 읽거나 사용할 수 있음.
def outer():
	
    name = 'bear2kery'
    def inner():
    	print('good night' + name)
    
    inner()
  • 함수의 밖에서 중첩 함수 호출 시 NameError 발생

동작 과정으로 알아보는 변수의 위치

# 전역 변수 (Global)
name = 'This is Startan'		# (4)

# func1 함수의 동작
def func1():
    
    # 바깥 함수 지역 변수(Enclosing ~) - name 
    name = 'jaina'				# (3)
    
    def hello(): 				# (2)
        
        # Local
        name = 'Thrall'
        print('Hello '+name)	
    
    hello()						# (1)
  1. hello() 실행
  2. hello 함수 내에서 name 변수가 있는 지 찾음.
    ▶ 있으면 print()의 name에 반영
  3. local Lv에 name이 없다면, 바깥 함수 지역에 name 변수가 있는 지 찾음
    ▶ 있으면 print()의 name에 반영
  4. Enclosing~ Lv에 없다면, 전역 변수 name이 있는 지 확인.
    ▶ 있으면 print()의 name에 반영
    5. 전역변수에도 없다면 내장 함수 위치에서 찾음?

사용 시 주의 사항

  • 파이썬에 능숙하지 않은 경우 전역변수 키워드 사용하지 않도록 해야함.
  • 전역 변수를 매개 변수로 사용하는 방식으로 사용하는 것이 좋음.
  • 재할당이 전역 변수 키워드를 대신하게 하지 않도록 주의.
    - 재할당을 하다보면 코드의 규모가 커지고 복잡해졌을 때,
    함수 내에서 전역변수 키워드를 중복해서 사용할 수 있음
profile
QA. 손으로 할 수 있는 모든 것을 좋아합니다.

0개의 댓글