Можно ли полагаться на порядок оценки аргументов функции Python?
Можно ли предположить, что аргументы функции оцениваются слева направо в Python?
Ссылка указывает, что так происходит, но, возможно, есть способ изменить этот порядок, который может нарушить мой код.
Что я хочу сделать, так это добавить отметку времени для вызова функции:
l = []
l.append(f(), time.time())
Я понимаю, что я могу последовательно оценивать аргументы:
l = []
res = f()
t = time.time()
l.append(res, t)
Но он выглядит менее изящным, поэтому я бы предпочел первый способ, если я могу положиться на него.
Ответы
Ответ 1
Да, Python всегда оценивает аргументы функции слева направо.
Это касается любого разделенного запятой списка, насколько я знаю:
>>> from __future__ import print_function
>>> def f(x, y): pass
...
>>> f(print(1), print(2))
1
2
>>> [print(1), print(2)]
1
2
[None, None]
>>> {1:print(1), 2:print(2)}
1
2
{1: None, 2: None}
>>> def f(x=print(1), y=print(2)): pass
...
1
2
Ответ 2
Цитата из справочной документации :
Python оценивает выражения слева направо.
Итак, вы можете рассчитывать на это.