簡體   English   中英

如何在Python中構造這樣的功能編程工具?

[英]How to construct such a functional-programming tool in Python?

我想要一個名為times()的函數,以使:

times(func,2)等同於lambda x:func(func(x))

times(func,5)等同於lambda x:func(func(func(func(func(x)))))

Python中有這樣的工具嗎? 如果我想自己編寫代碼,代碼會是什么樣?

謝謝!

我建議將其稱為power() ,因為這實際上是函數的n次冪。 標准庫中沒有這樣的東西,但是您可以自己輕松實現它:

def power(f, n):
    def wrapped(x):
        for i in range(n):
            x = f(x)
        return x
    return wrapped

謝謝,斯文

我找到了一種遞歸方法,但是您的方法看起來更像pythonic:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM