반응형

Decorator 란?

 

함수 A를 다른 명령을 받아 또 다른 함수 B로 호출 하는 것이다.

 

바로 예를 들어보겠습니다.

 

# 함수 장식자(decorator
def make2(fn):
    return lambda:'파이썬 ' + fn() # '파이썬'과 fn() 함수를 합쳐서 리턴

def make1(fn):
    return lambda:'공부를 '+fn()

def hello():
    return '열심히'

hi = make2(make1(hello))
print(hi())

# 출력 결과

파이썬 공부를 열심히

 

기존 hello() 함수는 '열심히' 만을 반환하는 함수입니다.

하지만 이 함수를 mak1이라는 함수에 씌워주고, 그 겉에는 또 다시 make2라는 함수로 덮어주었습니다.

 

그 말은 make2함수의 '파이썬'을 출력하고 그 안에 호출할 함수 make1 에서 '공부를' 호출 후 hello의 '열심히' 를 호출하게 됩니다.

 

위와 같은 방법이 아닌 다른 방법으로는 '@' 키워드를 사용하여도 적용 가능합니다.

 

함수를 데코레이션('@')으로 사용할 경우

def make6(fn):
    return lambda:'공부를 '+fn()

@make6
def hello1():
    return '열심히'

print((hello1()))


# 출력 결과

공부를 열심히

 

클래스를 데코레이션('@') 으로 사용할 경우

class prac(object):
    def __init__(self, fn):
        self.fn = fn

    def __call__(self, *args, **kwargs):
        result = self.fn(*args, **kwargs)
        print(f'Result: {result}')
        return result

@prac
def add(a, b):
    return a + b

add(5,1)

# 출력 결과


Result: 6
반응형

'python' 카테고리의 다른 글

python - 클래스  (0) 2020.05.10
python - 재귀함수  (0) 2020.05.10
python - 파이썬은 1급 함수인가 ?  (0) 2020.05.08
python - 가변인수  (0) 2020.05.08
python - range  (0) 2020.05.08
반응형

1급 함수의 조건 3가지

 

- 함수 안에 변수를 할당 할 수 있다.

- 인자로 함수를 전달 할 수 있다.

- 반환값이 함수가 가능하다.

 

대부분의 프로그래밍 언어는 1급함수의 조건에 충족합니다.

 

파이썬 또한 이 3가지를 충족합니다.

 

Ex 1)

def fun1(a, b):
    return a + b
fun2 = fun1
print(fun2(3,4))

def fun3(func):
    def fun4(): # 함수 안에 함수
        print('내부함수 출력')
    fun4()
    return func # 반환값이 함수
abc = fun3(fun1) # 인자로 함수 전달




출력 결과

7
내부함수 출력

 

조건1. 함수 안에 함수를 호출 할 수 있다.

func3 함수는 내부에서 fun4 함수를 호출하여 충족합니다.

 

조건2. 인자 abc로 함수 fun3을 호출하여 조건2을 충족합니다.

 

조건3. 반환값이 func으로 마지막 조건을 충족합니다.

반응형

'python' 카테고리의 다른 글

python - 재귀함수  (0) 2020.05.10
python - 함수 장식자 ( Decorator )  (0) 2020.05.10
python - 가변인수  (0) 2020.05.08
python - range  (0) 2020.05.08
python - 모듈  (0) 2020.05.08

+ Recent posts