파이썬/파이썬 기초

파이썬 중첩함수의 실행

개발자J군 2020. 9. 29. 20:16

중첩함수는 함수내에서만 호출

함수밖에서 중첩함수를 실행하는 것은 불가능.

 

단 아래와 같이는 실행 가능.

 

예제

 

#방법1
def func_a(num):
    print("first")
    
    def func_b():
        print(num)
        return "last"
        
    return func_b


fn=func_a(10)
print(fn())    


#방법2
def func_a(num):
    print("first")
    
    def func_b():
        print(num)
        return "last"
        
    return func_b
    
fn=func_a   #인자를 전달하지 않는다.
print(fn(10)())    

#결과는 모두 동일하게
>first
>10
>last

 

조금 더 어려운 예제를 보자.

def calc_digit(n):
    def final(digit):
        return digit**n
    return final
    

num_list=[]
for num in range(1,6):
    num_list.append(calc_digit(num))

이런 코드가 있다고 했을때 num_list에는 어떤 것이 담길까?

바로 인자 n을 받은 final 중첩함수가 들어가게된다.

쉽게 말해 num_list = [digit**1 , digit**2, digit**3, digit**4, digit**5] 의 상태가 된다.

 

따라서 아래와 같은 코드를 실행시키면 다음과 같다.

for i in num_list:
    print(i(3))

>3
>9
>27
>81
>243

3의 1승부터 5승까지 출력되게 된다.

 

충첩함수는 1~2가지 기능의 프로그램일 경우 유용할 수 있다. 하지만 다양한 기능의 경우는 클래스로 처리하는 것이 좋다.

 

반응형