在Python 3.6.1中,以下所有内容似乎从左到右评估:
In [1]: counter = iter(range(100))
In [2]: [next(counter), next(counter)]
Out[2]: [0, 1]
In [3]: (next(counter), next(counter))
Out[3]: (2, 3)
In [4]: next(counter), next(counter)
Out[4]: (4, 5)
In [5]: {next(counter): next(counter),
...: next(counter): next(counter)}
...:
Out[5]: {6: 7, 8: 9}
In [6]: print(next(counter), next(counter))
10 11
我发现list
,tuple
和dict
之类的集合以及函数参数以从左到右的方式评估其参数。
此行为是否得到保证,或者它是实现细节?我认为它必须是语言标准的一部分,因为否则程序将根据解释器的不同进行评估。
答案 0 :(得分:1)
是的,此行为是语言标准的一部分。请参阅文档中的Evaluation order部分:
6.15。评估顺序
Python从左到右计算表达式。注意,虽然 在评估作业时,在评估作业之前先评估右侧 左侧。
在以下各行中,表达式将在 后缀的算术顺序:
expr1, expr2, expr3, expr4 (expr1, expr2, expr3, expr4) {expr1: expr2, expr3: expr4} expr1 + expr2 * (expr3 - expr4) expr1(expr2, expr3, *expr4, **expr5) expr3, expr4 = expr1, expr2
在仅关于dict
文字的一个相关问题中,one answer指出CPython中的实际行为对于dict
since version 2.5是不正确的,并且在{{3}中已得到修复}。