함수 안에 함수 중첩해서 넣기 예제와 특징
예제1 코드>>
def a_func():
def b_func():
print("it's b_func")
print("it's a_func")
b_func()
a_func()
# b_func() #주석처리
결과>>
it's a_func
it's b_func
예제1 코드 주석>>
위 코드 예제는 a_func 함수 안에 b_func 함수를 넣어서 실행하고 있다.
a_func()에 의해 함수가 실행되었다고 생각하자. 그러면 해당함수는 컴퓨터 메모리의 스택(Stack)이라는 공간에 저장되어 실행 된다. 스택의 a_func 함수 시작점 주소부터 코드가 진행되는데 그 내부에서 b_func 함수도 선언된다. 그리고 print("it's a_func") 가 실행되고 b_func() 함수가 순차적으로 실행된다. 결과는 위의 코드에 나와 있는 것과 같다.
예제2 코드>>
def a_func():
def b_func():
print("it's b_func")
print("it's a_func")
b_func()
a_func()
b_func()
결과>>
NameError: name 'b_func' is not defined
예제2 코드 주석>>
이번에는 a_func(), b_func() 를 모두 실행하였다. 하지만 b_func는 정의되지 않았다고 출력되었다. 이유는 a_func()를 실행하여 해당 함수가 스택(stack)에 저장되었지만 실행이 종료되면 해당 함수는 Stack에서 지워진다. 그러므로 b_func()는 찾을 수 없게 된다.
예제3 코드>>
def a_func(a):
def b_func(b):
print(b)
print(a)
return b_func
a_var = a_func("it's a_func")
a_var("it's b_func")
결과>>
it's a_func
it's b_func
예제3 코드 주석>>
앞서 함수가 실행되면 스택에 저장되었다가 함수가 종료되면서 지워진다고 하였다. 만일 해당 함수를 지워지지 않게 계속 쓰고 싶다면 위 코드처럼 해당 함수를 변수에 넣고 실행하면 된다. 변수에 들어간 함수는 메모리 영역에서 변수부분에 할당된 주소에 들어가기 때문에 코드가 실행되는 동안에는 유지된다. 그래서 위 파이썬 코드처럼 a_var 변수에 함수를 저장하고 return으로 받은 b_func를 저장한다. 그리고 인자 값으로 넣으면 b_func를 계속 사용할 수 있게 된다.
'파이썬(Python) > 문법' 카테고리의 다른 글
파이썬 *args, **kwargs 의미와 예제를 통해 이해하기 (0) | 2021.04.24 |
---|---|
파이썬에서 @(골뱅이, 데코레이터라고 불림)이란? 사용방법과 예제 (2) | 2021.04.22 |
파이썬(Python) 속성 중 __name__ 이란? (0) | 2021.04.15 |
JSON 개념, 의미, 사용 목적, Python Flask 와의 연동 예제 설명 (3) | 2021.01.13 |
list copy [:] 리스트안에 콜롬(:) 사용하는 이유 (0) | 2020.12.14 |