簡體   English   中英

Python中許多參數的乘法函數

[英]Multiplying functions of many parameters in Python

顯然,h(x,y,z)= f(x,y)* g(y,z)意味着什么。 我想在Python中使用一個設備來執行類似的操作,例如:

fmul(f1(x,y),f2(y,z)) -> lambda x,y,z: f1(x,y)*f2(y,z)
fmul(f1(x,y),f2(z,y)) -> lambda x,y,z: f1(x,y)*f2(z,y)

等等,取決於參數名稱,它們可以通用地工作。 當然,它不能像上面的偽代碼中那樣工作,因為Python會首先嘗試評估f1和f2調用,並且由於這些調用將使用某些變量名而不是值來進行,因此會引發NameError。 有沒有辦法將那些未更改的變量名傳遞給lambda的定義,以便獲得具有正確定義的參數順序的正確函數對象? 我想用像Lisp這樣的語言和宏和符號來做相對容易,但是如何用Python做到呢? 我找到的最接近解決方案的方法是使用inspect模塊檢索函數參數,但是這些參數是字符串,因此我必須通過串聯字符串來組成lambda表達式,然后進行評估。 有沒有更直接的方法?

將函數作為參數傳遞:

def fmul(f1, f2):
    return (lambda x,y,z: f1(x,y)*f2(y,z))

如果您事先知道參數名稱(並且可以重新定義f1f2 ),則可以使用關鍵字參數來實現,而不必與inspect混為一談:

def f1(x, y, **kwargs):
    return x + y


def f2(z, y, **kwargs):
    return z - y


def fmul(f1, f2):
    return lambda x, y, z: f1(x=x, y=y, z=z) * f2(x=x, y=y, z=z)

暫無
暫無

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

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