내가 수 있도록하기 위해, times()
라는 기능을 원하는 : 파이썬에서 이러한 도구는Python에서 이러한 함수 프로그래밍 도구를 만드는 방법은 무엇입니까?
times(func,2)
해당 lambda x:func(func(func(func(func(x)))))
에 해당 lambda x:func(func(x))
및 times(func,5)
에 있습니까? 나 혼자 쓰고 싶다면 코드는 어떻게 생겼을 까?
감사합니다.
내가 수 있도록하기 위해, times()
라는 기능을 원하는 : 파이썬에서 이러한 도구는Python에서 이러한 함수 프로그래밍 도구를 만드는 방법은 무엇입니까?
times(func,2)
해당 lambda x:func(func(func(func(func(x)))))
에 해당 lambda x:func(func(x))
및 times(func,5)
에 있습니까? 나 혼자 쓰고 싶다면 코드는 어떻게 생겼을 까?
감사합니다.
사실이 기능은 n
이기 때문에 power()
이라고 부릅니다. 이 표준 라이브러리에 같은 건 없다,하지만 당신은 쉽게 직접 구현할 수 있습니다
def power(f, n):
def wrapped(x):
for i in range(n):
x = f(x)
return x
return wrapped
감사합니다,
스벤
을 나는 것을 할 수있는 재귀 적 방법을 발견,하지만 당신은 더 파이썬 같습니다 을 장식으로 구현def power(func, n):
def lazy(x, i=n):
return func(lazy(x, i-1)) if i > 0 else x
return lazy
>>> power(lambda x:x*2,3)(9)
72
>>> power(lambda x:x*2,2)(9)
36
>>> power(lambda x:x*2,1)(9)
18
>>> power(lambda x:x*2,0)(9)
9
및 방법 :
def powerize(n):
def wrapped(func):
def newfunc(*args):
return power(func,n)(*args)
return newfunc
return wrapped
@powerize(3)
def double_3(x):
return x*2
>>> double_3(8)
64
감사합니다, 스벤. ''wrapped'' 함수는 마술처럼 보입니다. –
내가 할 수 있으면이 +100을 주겠다. 매우 우아한! – inspectorG4dget
나는 ** 반복적 인 ** 방법 대신 ** 재귀적인 ** 방법이 있는지를 궁금 할 것입니다. –