В 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
, а также аргументы функций, оценивают свои аргументы слева направо.
Гарантируется ли это поведение или это детали реализации? Я предполагаю, что это должно быть частью языкового стандарта, потому что иначе программы будут оцениваться по-разному в зависимости от переводчика.