リファレンス ドキュメントからの引用:
Python は式を左から右に評価します。
そうです、あなたはそれを当てにすることができます(1つの例外を除いて、以下を参照してください).
呼び出し((...)
関数名など、プライマリーの後の部分) は単なる別の式primaryであり、呼び出しの引数は単なる追加式です。
注: この規則には例外が 1 つあります。呼び出しで使用*expression
する場合 (イテラブルを拡張して追加の位置引数を形成するため)、この式はキーワード引数式の前に評価されます。
>>> from itertools import count
>>> def bar(n, r=(), c=count()): print(f'{next(c)}: bar({n!r})'); return r
...
>>> def foo(*args, **kwargs): pass
...
>>> foo(bar('a1'), spam=bar('a2'), *bar('varargs'), **bar('kwargs', {}))
0: bar('a1')
1: bar('varargs')
2: bar('a2')
3: bar('kwargs')
リンクされたドキュメントには次のように記載されています。
この結果、*expression
構文は明示的なキーワード引数の後に表示される場合がありますが、キーワード引数の前に処理されます[.]