【发布时间】:2013-07-30 16:18:10
【问题描述】:
假设函数参数在 Python 中从左到右计算是否安全?
参考说明它是这样发生的,但也许有一些方法可以改变这个顺序,这可能会破坏我的代码。
我要做的是为函数调用添加时间戳:
l = []
l.append(f(), time.time())
我知道我可以按顺序评估参数:
l = []
res = f()
t = time.time()
l.append(res, t)
但它看起来不太优雅,所以如果我可以依赖它,我更喜欢第一种方式。
【问题讨论】:
-
如果参考文献是这样说的,并且没有明确说明将来可能会改变,那么您可以依赖它。
-
"some way to change this order"怎么改? (函数无法选择如何评估它们的参数,它们在被传递给函数之前被评估) -
在您的用例中,评估顺序似乎并不重要,除非
f()是一个长期运行的函数。 -
@DavidRobinson 据我记得在 C 中你不能依赖它。通常根据 __stdcall (或其他)从右到左评估参数,以便堆栈中的顺序方便。我想也许在 python 中有一个类似的技巧来改变这个顺序
-
我不同意顺序版本不太优雅;它使依赖关系明确。有多少读过你的代码的人会知道 Python 肯定会强制执行顺序?
标签: python arguments operator-precedence