IT 이것저것

[Python/기초] 함수 안에 함수 만들기

2것저것 2022. 10. 20. 17:18
728x90
반응형

함수 안에 함수 만들기

  • 자신이 소속된 함수의 매개변수에 접근할 수 있음
  • def 로 함수를 만든 후 그 안에서 def로 다시 함수를 만듦
def 함수이름1():
    코드
    def 함수이름2():
        코드

   예제

#!/usr/bin/python3
def add(a,b):      # 첫번째 함수 정의
    sum = a + b     # 매개변수 a, b를 더함
    def print_sum():    #두번째 함수 정의
        print("%d + %d = %d" % (a,b,sum) )    # 함수 add에서 더한 값을 출력
    print_sum()   # 두번째 함수 호출
 
add(1,2)   # 함수 실행 순서 : add 함수 실행 -> print_sum 함수 실행
 
=========================================
 
# 실행 결과
1 + 2 = 3

 

지역 변수의 범위

def print_hello():      # 바깥 함수의 지역 변수는 내부에 속한 함수에서 접근 가능함
    hello = 'Hello, world!'
    def print_message():
        print(hello)    # 바깥쪽 함수의 지역 변수를 사용

 

지역 변수 값 변경

#!/usr/bin/python3
def parent():
    a = 10
    print ( "parent a = %d" %a)
    def child():
        a = 20      # parent 함수에서 이름만 같은 변수를 새로 생성한 것으로 parent 함수의 변수를 변경한 것이 아님. "parent 함수 a 변수 ≠ child 함수 a 변수". 함수에서 변수 선언 시 현재 함수의 지역 변수로 생성됨
        print("child a = %d" %a )
    child()
    print(a)
 
parent()
 
=========================================
# 실행 결과
 
parent a = 10
child a = 20
10
#!/usr/bin/python3
def parent():
    a = 10
    print ( "parent a = %d" %a)
    def child():
        nonlocal a   # 변수 앞에 nonlocal 선언 시 현재 함수에서 지역 변수를 생성하는 것이 아닌 제일 가까운 바깥쪽 함수의 지역 변수를 사용하는 것을 뜻함
        a = 20     
        print("child a = %d" %a )
    print(a)    
 
parent()
 
=========================================
# 실행 결과
 
parent a = 10
child a = 20
20
#!/usr/bin/python3
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     # 가장 가까운 바깥쪽 함수의 지역 변수를 사용하는 것으로 C 함수에서 가장 가까운 B 함수의 x 변수 사용
400     # 가장 가까운 바깥쪽 함수의 지역 변수를 사용하는 것으로 C 함수에서 가장 가까운 B 함수에서는 y 변수가 없어 A 함수의 y 변수 사용

 

전역 변수 사용

#!/usr/bin/python3
x = 1
y = 1
 
def A():
    x = 10
    y = 100
    def B():
        x = 20
        def C():
            global x      # 변수 앞에 global 선언 시 전역 변수 사용
            global y
            x = x + 30
            y = y + 300
            print(x)
            print(y)
        C()
    B()
 
A()
 
 
=========================================
# 실행 결과
 
31
301
728x90
반응형