這是我的第一個問題,所以我真誠地爲任何發佈的錯誤表示誠摯的歉意,我相信我會做出這些錯誤。我首先搜索了以前回答的問題,但我沒找到合適的解決方案,儘管我知道我可能沒有使用正確的術語或關鍵字進行搜索。如何實現函數的變體/變體
我有一個通用函數,我想在Python中快速進行評估。它被傳遞給一個優化器(fmin_cobyla),我寧願只採用一個參數。我希望能夠選擇使用可能由標誌控制的此功能的不同變體(變體?味道?)。因爲我希望它很快評估它沒有意義具有函數內的一堆if或case語句(?右),所以目前我有在圍繞此函數的定義語句變種:
if flag==1:
def f(x):
for i in range(0,len(x)*3,3):
A[i:i+3,i:i+3]=1/x[i/3]*np.eye(3)
tmp=np.linalg.solve(A,b)
y=somecmodulefunction(tmp)
return y
elif flag==2:
def f(x):
for i in range(0,len(x)*3,3):
A[i:i+3,i:i+3]=x[i/3]*np.eye(3)
tmp=np.linalg.solve(A,b)
y=somecmodulefunction(tmp)
return y
...
這些功能與一行除外相同。這是做到這一點的正確方法嗎?無論如何要做到這一點,如果我有10個不同的變體,這不僅是一個冗長的笨重的代碼塊?
謝謝!
給函數添加一個參數'flag',然後添加一個'if'模塊來實現不同的行爲。嘗試遵循DRY(不要重複自己)。 – TigerhawkT3
如果函數需要評估10^10次,那麼函數中的語句是否會減慢其評估速度? (我在原帖中提到過) – omegamanda
當然,添加一個語句會使其減慢一些非零值,但如果您擔心從簡單的'if boolean_value'命中性能,您應該編寫程序在C. – TigerhawkT3