假设我有一个getQ(x)返回一些数字的函数,它很慢.现在,如果我这样做:
x = 10
x = getQ(x) if getQ(x) >= 0 else 0
Run Code Online (Sandbox Code Playgroud)
并getQ在这种情况下得到执行两次?
这是:
x = getQ(x)
x = x if x >= 0 else 0
Run Code Online (Sandbox Code Playgroud)
更快?
如果是这样,对于这种情况,是否有更优雅的单线程?
是的,getQ如果结果是非负的话会被调用两次,所以第二种情况肯定会更快.
在这种特殊情况下,你可以写x = max(getQ(x), 0).您正在寻找的"通用"解决方案就像
x = (lambda x: x if x >= 0 else 0)(getQ(x))
Run Code Online (Sandbox Code Playgroud)
我不建议在实际代码中使用它,但它允许您绑定一个名称,同时仍然保持一个表达式.
| 归档时间: |
|
| 查看次数: |
130 次 |
| 最近记录: |