[TIL. 26] Python- Neseted Function (Closure, Decorator)

신지원·2021년 3월 22일
0

Python

목록 보기
12/14
post-thumbnail

nested function

조건문이나 반복문처럼 함수도 중첩해서 사용가능하다.

def parent_function():
    def child_function():
        print("this is a child function")

    child_function()

parent_function()
> "this is a child function"

이런식...

💡 중첩함수를 사용하는 이유는?
1. 가독성
2. Closure

Closure

1) 중첩함수가 부모 함수의 변수나 정보를 중첩함수 내에서 사용한다.
2) 부모 함수는 중첩 함수를 리턴한다.
3) 부모 함수에서 리턴했으므로 부모 함수의 변수는 직접적인 접근이 불가능 하지만 부모 함수가 리턴한 중첩 함수를 통해서 사용될 수 있다.

💡 부모함수가 자식함수를 return 해서 자식 함수에서도 부모 함수의 인자를 사용할 수 있도록 한다.

Decorator

함수를 받아 명령을 추가하고 이를 다시 함수의 형태로 반환하는 함수이다. 함수의 내부를 수정하지 않고 기능의 변화를 주고 싶을 때 사용할 수 있고, 주로 함수의 앞이나 뒤에 처리 하고싶은 것이 있을 때 사용할 수 있다.

데코레이터의 기본 구조

def out_func(func):  # 기능을 추가할 함수를 인자로   
    def inner_func(*args, **kwargs):
        return func(*args, **kwargs)
    return inner_func
    
@ out_func
def example_func():
	return "ㅇㅇ"

데코레이터는 이런 기본적으로 이런구조로 이루어진다.
@를 사용해서 decorator로 사용가능하다.
파이썬에서는 함수를 다른 함수의 parameter로 사용하는것이 가능하다.

def welcome_decorator(func):
    def welcome():
        a = func()
        a += "welcome to WECODE!"
        return a

    return welcome


@welcome_decorator
def greeting():
    return "Hello, "


greeting()  # "Hello, Welcome to WECODE"

"welcome to WECODE!" 는 항상 greeting() 함수의 return 값 앞에 오도록 두어 언제든지 greeting () 함수의 return 값만 바꾸어서구문의 변화를 줄 수 있다.

0개의 댓글