이 문서의 예에서는 Python의 Currying 함수에 대한 심층 분석을 설명합니다. 참고용으로 모두와 공유하세요. 세부 사항은 다음과 같습니다.
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)
Currying을 배우고 나면 Python에 대한 가장 중요하고 필수적인 지식을 얻게 될 것입니다. 데코레이터. ㅋㅋㅋ
커링
위 내용은 Python의 심층 분석--Currying 함수의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!