중첩함수는 함수내에서만 호출
함수밖에서 중첩함수를 실행하는 것은 불가능.
단 아래와 같이는 실행 가능.
예제
#방법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가지 기능의 프로그램일 경우 유용할 수 있다. 하지만 다양한 기능의 경우는 클래스로 처리하는 것이 좋다.
반응형
'파이썬 > 파이썬 기초' 카테고리의 다른 글
python PIL ,Image 에러 TypeError: integer argument expected, got float (0) | 2020.10.14 |
---|---|
HTTP 응답코드 (0) | 2020.10.05 |
python json - load 와 loads (0) | 2020.07.08 |
(python )파이썬 기초, from과 import (0) | 2020.07.03 |
파이썬 엑셀 다루기 기초 - 읽기 (openpyxl) (0) | 2020.06.03 |