Python

[Python] Closure 및 Decorator

Jeong Jeon
반응형

1). Closure

  • 중첩함수가 부모함수의 변수나 정보를 닫아놓고 사용하는것

  • 부모함수는 내부함수를 리턴하는 방식으로 사용

  • 내부 함수에 직접적인 접근 불가능

 

  • 설명 :

    • cals() 부모함수에 2를 넣어 주면, 부모함수의 파라미터 n을 자식함수의 n에 대입시켜 자식함수를 return한다.

    • 부모함수를 변수에 담아 사용할때는 부모함수의 파라미터를 포함한 자식함수가 담기게 된다.

    • 그 변수에 파라미터를 넣어주어 호출하면 자식함수의 파라미터에 변수파라미터가 담기게 되어 실행된다.

def cals(n):

def sum(digit):

return digit + n

return sum



nth = cals(2)

nth(2)

==> 4

 

2). Decorator

  • 다른 함수에 함수를 적용하여 실행하는 방식

def decorator_tt(func):

def wrapper():

print("먼저실행된다")

func() ==> Decorator를 달아놓은 함수가 실행

print("나중에 실행된다")

return wrapper



##적용

@decorator_tt

def login():

print("실행함수")

==>

먼저실행된다

실행함수

나중에 실행된다

  • 파라미터가 있는 함수에 Decorator 적용

    • 파라미터에 관계없이 모든 함수에 적용가능하게 만들려면?

      • input1,input2로 정의 하지않고, *args, **kwargs 로 정의 하여 사용하면 된다.

>>> def type_checker(func):

... def wrapper(input1,input2):

... if type(input1) != int or type(input2) != int:

... print("뭐야이거")

... return

... return func(input1,input2) ==>왜 func(input1,input2)를 return하지..? => 내생각엔 조건을 만족하면 원래 그대로의 function을 유지한다라는 뜻인 것 같다.

... return wrapper

...

>>> @type_checker

... def mul(input1,input2):

... return input1*input2

...

>>> mul('a','b')

뭐야이거

>>> mul(1,2)

2
반응형

'Python' 카테고리의 다른 글

[Python] Pandas 기초 공부 - Series  (0) 2021.01.13
[Python] Class란? 개념잡기  (0) 2021.01.04
[Python] Self 및 Class개념 잡기  (0) 2021.01.04
[Python] - JSON Parsing(파싱)  (0) 2020.12.30
[Python] 기초문법 - 함수  (0) 2020.12.29