2013-01-23 17 views
9

のは、我々はこのような何かを持っているとしましょう:評価順

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

は、Pythonインタプリタはfcn2()fcn1()を評価しない、または順序が定義されていませんか?

+1

もしあなたが本当に心配しているなら、 'a = tuple(x(fcn1、fcn2)のxのための)')または対応するリストの理解...私はかなり確信しています左から右に評価されます。 – mgilson

答えて

7

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   

注:割り当ての場合には、右手側が最初に評価されます。

+2

これは、標準のPythonインタプリタに当てはまります。しかし、それは真実である必要がありますか? – chepner

+0

@chepner私はそう信じています:http://docs.python.org/2/reference/expressions.html#list-displays –

+0

disモジュールはクールに見えます! Pythonがそのようなツールを持っていることを知らなかった..ありがとう! – szli

2

の式はleft to rightと評価されます。このリンクは、具体的にはtupleケースを扱います。リストケースを具体的に扱う別のlinkがあります。