【发布时间】:2015-06-13 23:34:43
【问题描述】:
这是我的第一个问题,因此对于我确信我会犯的任何发布错误,我深表歉意。我确实首先搜索了以前回答的问题,但我没有找到合适的解决方案,尽管我知道我可能没有使用正确的术语或关键字进行搜索。
我想在 Python 中快速评估一个通用函数。它被传递给优化器(fmin_cobyla),我希望它只接受一个参数。我希望能够选择使用可能由标志控制的此功能的不同变体(变体?口味?)。由于我希望快速评估它,因此在函数中包含一堆 if 或 case 语句是没有意义的(对吗?),所以目前我有围绕函数变体定义的 if 语句:
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(不要重复自己)。 -
如果函数需要计算 10^10 次,函数中的 if 语句不会减慢它的计算速度吗? (我在原帖中提到过)
-
当然,添加一个语句会减慢一些非零的速度,但是如果您担心简单的
if boolean_value会影响性能,您应该使用 C 编写程序。
标签: python function variations