2013-01-23 16 views
9

मान लें कि हम कुछ इस तरह है:मूल्यांकन आदेश

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

अजगर दुभाषिया fcn2() से पहले का मूल्यांकन करता है fcn1(), या आदेश अपरिभाषित है?

+1

यदि आप इसके बारे में वास्तव में चिंतित हैं, तो आप इसका उपयोग कर सकते हैं: 'a = tuple (x() x में (fcn1, fcn2)) या संबंधित सूची समझ ... हालांकि मुझे यकीन है कि फ़ंक्शंस बाएं से दाएं का मूल्यांकन किया जाएगा। – 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

यह मानक पायथन दुभाषिया के बारे में सच है। लेकिन क्या यह * आवश्यक * सत्य होना चाहिए? – chepner

+0

@chepner मुझे विश्वास है हाँ: http://docs.python.org/2/reference/expressions.html#list- प्रदर्शित करता है –

+0

डी मॉड्यूल अच्छा लग रहा है! पता नहीं था कि अजगर का ऐसा उपकरण है .. धन्यवाद! – szli

2

अभिव्यक्तियों का मूल्यांकन left to right है। यह लिंक विशेष रूप से tuple केस का इलाज करता है। यहां एक और link है जो विशेष रूप से सूची के मामले का व्यवहार करता है।

संबंधित मुद्दे