簡體   English   中英

Python函數組合

[英]Python function composition

我試着用很好的語法實現函數組合,這就是我所擁有的:

from functools import partial

class _compfunc(partial):
    def __lshift__(self, y):
        f = lambda *args, **kwargs: self.func(y(*args, **kwargs)) 
        return _compfunc(f)

    def __rshift__(self, y):
        f = lambda *args, **kwargs: y(self.func(*args, **kwargs)) 
        return _compfunc(f)

def composable(f):
    return _compfunc(f)

@composable    
def f1(x):
    return x * 2

@composable
def f2(x):
    return  x + 3

@composable
def f3(x):
    return (-1) * x

print f1(2) #4
print f2(2) #5
print (f1 << f2 << f1)(2) #14
print (f3 >> f2)(2) #1
print (f2 >> f3)(2) #-5

它適用於整數,但在列表/元組上失敗:

@composable
def f4(a):
    a.append(0)

print f4([1, 2]) #None

哪里出錯?

append做就地添加,正如Ignacio Vazquez-Abrams所說(嗯,暗示) - 所以,雖然你可以通過添加一個return你的函數來解決這個問題,但它會產生副作用,改變它傳遞的參數也是:

@composable
def f4(a):
    a.append(0)
    return a

最好使用以下更簡潔的代碼,這些代碼也會創建並返回一個新對象:

@composable
def f4(a):
  return a + [0]

暫無
暫無

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

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