>백엔드 개발 >파이썬 튜토리얼 >Python의 심층 분석--Currying 함수

Python의 심층 분석--Currying 함수

零到壹度
零到壹度원래의
2018-04-19 16:08:472196검색

이 문서의 예에서는 Python의 Currying 함수에 대한 심층 분석을 설명합니다. 참고용으로 모두와 공유하세요. 세부 사항은 다음과 같습니다.

1. 정의:

1) 두 개의 매개변수를 허용하는 원래 함수를 하나의 매개변수를 허용하는 새로운 함수로 변경하는 과정을 말합니다. 새로운 함수는 원래 두 번째 매개변수를 매개변수로 취하는 함수를 반환합니다

2) 예: 덧셈 함수 커링: 함수를 중첩을 통해 커링 함수로 변환하는 방법입니다.

def add(x,y):
    return x + y
def add(x):
    def _add(y):
        return x + y
    return _add

두 번째, 적용:

요구 사항:

추가 기능, 그 기능을 강화하고 호출되고 호출된 매개 변수의 정보를 출력할 수 있도록 하고 싶습니다.

def add(x,y):
    return x + y

이제 정보 출력 기능을 추가합니다.

def add(x,y):
    print('call add,x + y')  #log output to the console
    return x + y

위 추가 기능이 요구 사항을 충족하지만 다음과 같은 세 가지 단점이 있습니다.

1. print 문의 결합 정도가 너무 높습니다.

2. 추가 기능은 비즈니스 기능에 속하지만, 정보 출력 기능은 비업무 기능 코드에 속할 수 있으므로 비즈니스 기능 추가에 배치하면 안 됩니다.

그런 다음 다음과 같은 개선 사항을 적용합니다.

def add(x,y):
    return x + y
def logger(fn):
    print('begin')  #enhanced output
    x = fn(4,5)
    print('end')    #enhanced features
    return x
print(logger(add))

위의 개선 사항을 통해 비즈니스 기능을 분리할 수 있지만 fn 함수 호출에서 매개 변수를 전달하는 것이 문제가 됩니다. 매개변수를 유연하게 전달하고 싶지만 매개변수가 내부 함수에 있습니다. 이 문제를 해결하기 위해 유연한 언어 Python을 사용하는 방법은 무엇입니까?

def add(x,y):
    return x + y
def logger(fn):
    def _logger(*args,**kwargs):
        print('begin')
        c = fn(*args,**kwargs)
        print('end')
        return c
    return _logger
logger(add)(2,3)

이제 매개변수를 유연하게 입력할 수 있습니다

다음은 몇 가지 구체적인 예입니다:

def ad1(m,n,*,l=909):
    return m + n + l
def loger(fn,*args,**kwargs):
    print('What\'s the matter?')
    ret = fn(*args,**kwargs)
    return ret
print(loger(ad1,2,3,l=4))   #Can you currying them?
def add(x,y,*,z=9):
    return x + y + z
def logger(fn,*args,**kwargs):
    print('This is a stupid function')
    ret = fn(*args,**kwargs)  #after collections it needs to be deconstructed
    return ret
print(logger(add,2,4,z=17))
def ad1(m,n,*,l=909):
    return m + n + l
def loger(fn):
    def _loger(*args,**kwargs):   #append a function as wrapper
        print('What\'s the matter?')    
        ret = fn(*args,**kwargs)   #the function which is be wrapped and transfer args and kwargs
        return ret
    return _loger
#print(loger(ad1)(2,3,l=4))  also okay
t = loger(ad1)  #defind the function loger
r = t(2,3,l=4)  # income parameters and transfer it
print(r)

3. 요약:

Currying을 배우고 나면 Python에 대한 가장 중요하고 필수적인 지식을 얻게 될 것입니다. 데코레이터. ㅋㅋㅋ


커링

위 내용은 Python의 심층 분석--Currying 함수의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.