파이썬 전역변수, 지역변수

에구마·2023년 2월 15일
0

Python

목록 보기
9/11

범위 (scope)

# outer(), inner() 함수 입장에서 전역(global) 범위
a = 1
def outer():
    # outer() 함수 입장에서 지역(local) 범위
    # inner() 함수 입장에서 비지역(nonlocal) 범위
    def inner():
        # inner 함수 입장에서 지역(local) 범위
outer()

전역 변수 global

전역 변수는 어느 지역 내에서든 접근 가능

> 접근

globalVar = "전역변수"

def scopeCheck():
    print(globalVar) ### 가능
    def scopeCheck2():
        print('두번째함수 내에서:' ,globalVar) # 가능
    scopeCheck2()
scopeCheck()
> 변경은 불가

globalVar = "전역변수"

def scopeCheck():
    print(globalVar) ### 불가능! 
    # UnboundLocalError: local variable 'globalVar' referenced before assignment
    globalVar = "전역변수 변경"
scopeCheck()

같은 변수명을 지역함수에서 새롭게 만든 셈이기 때문에 그 함수에서만 적용된다. 할당 이전 print라 에러.

변경하려면 변경하는 그 함수내에서 global 선언해줘야함

globalVar = "전역변수"

def scopeCheck():
    global globalVar
    print(globalVar)		# "전역변수"
    globalVar = "전역변수 변경"
    print(globalVar)		# "전역변수 변경"
scopeCheck()

지역 변수 local nonlocal

globalVar = "전역변수"

def outer():
    outerlocal = "바깥쪽 지역변수"
    def inner():
        print(outerlocal)		###가능 (바깥 지역변수에 접근 가능)
        print(globalVar)		###가능 (전역변수에 접근 가능)
        outerlocal = "바깥쪽 지역변수 변경"	### 불가능!!!!
        innerlocal = "안쪽 지역변수"
    inner()
    print(innerlocal)			### 불가능!!! not definded
outer()

inner함수 기준으로는 innerlocal은 지역변수, outer함수 내 변수인 outerlocal은 nonlocal변수이다.

nonlocal변수 즉 바깥함수의 변수에 접근만 가능
전역변수에 접근하려면 global 선언
바깥쪽 지역변수에 접근하려면 nonlocal 선언

지역 변수를 바깥쪽 지역 혹은 전역에서 쓰려고 한다면 그 변수가 선언 된 곳에서 global

profile
코딩하는 고구마 🍠 Life begins at the end of your comfort zone

0개의 댓글