12

次のようなものがあるとしましょう。

a = (fcn1(), fcn2())
b = [fcn1(), fcn2()]

Python インタープリターはのfcn1()前に評価しますかfcn2()、それとも順序は定義されていませんか?

4

2 に答える 2

11

それらは左から右に評価されます。

ドキュメントから(リスト用):

コンマ区切りの式のリストが提供されると、その要素は左から右に評価され、その順序でリスト オブジェクトに配置されます。

を使用した小さなテスト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        

注: 代入の場合、右側が最初に評価されます。

于 2013-01-23T19:03:41.533 に答える
3

式は左から右に評価されます。このリンクは、特にtupleケースを扱います。リストケースを具体的に扱う別のリンクを次に示します。

于 2013-01-23T19:04:39.563 に答える