のは、我々はこのような何かを持っているとしましょう:評価順
a = (fcn1(), fcn2())
b = [fcn1(), fcn2()]
は、Pythonインタプリタはfcn2()
前fcn1()
を評価しない、または順序が定義されていませんか?
のは、我々はこのような何かを持っているとしましょう:評価順
a = (fcn1(), fcn2())
b = [fcn1(), fcn2()]
は、Pythonインタプリタはfcn2()
前fcn1()
を評価しない、または順序が定義されていませんか?
left to rightから評価されます。 (リストの場合)docsから
:
式のコンマ区切りのリストが供給され、左から右へと順こと にリストオブジェクトに配置から評価さ その要素。
dis.dis()
を使用して小テスト:
In [208]: def f1():pass
In [209]: def f2():pass
In [210]: import dis
In [212]: def func():
a = (f1(), f2())
b = [f1(), f2()]
.....:
In [213]: dis.dis(func)
2 0 LOAD_GLOBAL 0 (f1)
3 CALL_FUNCTION 0
6 LOAD_GLOBAL 1 (f2)
9 CALL_FUNCTION 0
12 BUILD_TUPLE 2
15 STORE_FAST 0 (a)
3 18 LOAD_GLOBAL 0 (f1)
21 CALL_FUNCTION 0
24 LOAD_GLOBAL 1 (f2)
27 CALL_FUNCTION 0
30 BUILD_LIST 2
33 STORE_FAST 1 (b)
36 LOAD_CONST 0 (None)
39 RETURN_VALUE
注:割り当ての場合には、右手側が最初に評価されます。
の式はleft to rightと評価されます。このリンクは、具体的にはtuple
ケースを扱います。リストケースを具体的に扱う別のlinkがあります。
もしあなたが本当に心配しているなら、 'a = tuple(x(fcn1、fcn2)のxのための)')または対応するリストの理解...私はかなり確信しています左から右に評価されます。 – mgilson