본문 바로가기
Python

[Python] 함수 내 함수

by 자몽먹은토끼 2024. 10. 4.
728x90
반응형

 

def A():
    x = 10        # A의 지역 변수 x
    def B():
        print(x)
 
    B()
 
A()

> 10

: 해당 함수 호출시 동일 지역이었던 변수는 가져와서 쓰기 ok

 

 

def A():
    x = 10        # A의 지역 변수 x
    def B():
        x = 20    # x에 20 할당
 
    B()
    print(x)      # A의 지역 변수 x 출력
 
A()

> 10

: A함수에서 정의하는 x와 B함수에서 정의하는 x가 다름.

각각의 지역변수 (다른 두 지역의 변수)

 

 

def A():
    x = 10        # A의 지역 변수 x
    def B():
        nonlocal x    # 현재 함수의 바깥쪽에 있는 지역 변수 사용
        x = 20        # A의 지역 변수 x에 20 할당
 
    B()
    print(x)      # A의 지역 변수 x 출력
 
A()

> 20

: 해당 함수 바로 바깥에서 정의한 것을 가져와 수정 (nonlocal)

같은 x를 가리킴 = 변수 동기화

 

 

def A():
    x = 10
    y = 100
    def B():
        x = 20
        def C():
            nonlocal x
            nonlocal y
            x = x + 30
            y = y + 300
            print(x)
            print(y)
        C()
    B()
A()

> 50

> 400

: nonlocal은 현재 함수의 바깥쪽에 있는 지역변수를 찾을 때, 가장 가까운 함수부터 먼저 찾는다.

nonlocal x는 가장 가까운 함수 B의 x인 20을 가리키고,

nonlocal y는 함수 A의 y인 100을 가리킨다. 

 

 

 

 

 

 

global

 

x = 1
def A():
    x = 10
    def B():
        x = 20
        def C():
            global x
            x = x + 30
            print(x)
        C()
    B()
A()

> 31

: global 키워드를 사용하면 함수가 몇 단계든 상관없이 무조건 전역변수를 사용하게 된다. 

전역변수 x = 1

 

 

 

 

 

안써도 되는 경우?
728x90
반응형