2013-03-28 13 views
5
def key(): print 'key' 
def val(): print 'val' 

{key() : val()} 

प्रिंट val, key, यानी मान का मूल्यांकन पहले किया जाता है। क्या यह व्यवहारशब्दकोश शब्दकोष का मूल्यांकन क्रम

  • पाइथन संस्करणों और कार्यान्वयन में लगातार है?
  • कहीं भी दस्तावेज?
+0

हो सकता है इस कारण से है: अपने कोड 'को डीआईसी बराबर है [कुंजी()] = वैल()'। और असाइनमेंट ऑपरेटर में आरएचएस का हमेशा मूल्यांकन किया जाता है, इसलिए '' वाल 'पहले मुद्रित हो जाता है और फिर एलएचएस निष्पादित किया जाता है। –

उत्तर

10

संदर्भ मैनुअल के इस खंड के क्रम दस्तावेजों (http://docs.python.org/2/reference/expressions.html#dictionary-displays कुछ नहीं कहता है), लेकिन यह है कि तुम क्या देख रहे हैं की तुलना में अलग है दावा: http://docs.python.org/2/reference/expressions.html#evaluation-order

निम्नलिखित लाइनों में, भाव में मूल्यांकन किया जाएगा उनके प्रत्यय अंकगणित आदेश:

expr1, expr2, expr3, expr4 
(expr1, expr2, expr3, expr4) 
{expr1: expr2, expr3: expr4} 
expr1 + expr2 * (expr3 - expr4) 
expr1(expr2, expr3, *expr4, **expr5) 
expr3, expr4 = expr1, expr2 

और वहाँ इसके बारे में कार्यान्वयन के खिलाफ एक खुले बग है: Evaluation order of dictionary display is different from reference manual

+0

बहुत बहुत धन्यवाद! मजेदार कैसे आरएच कहता है कि किसी ने भी आठ साल तक देखभाल नहीं की है ... और 100,000 अंक के लिए बधाई! – georg

5

यह पता चला है कि यह कार्यान्वयन में निरंतर है।

def p(x): 
    print(x) 
    return x 

{p('k1'): p('v1'), p('k2'): p('v2'), p('k3'): p('v3')} 

देता है:

Python 2.7.3 (default, Aug 1 2012, 05:16:07) 
IronPython 2.7.3 (2.7.0.40) on Mono 4.0.30319.1 (32-bit) 
[PyPy 2.0.0-beta1 with GCC 4.4.3] on linux2 

v1 
k1 
v2 
k2 
v3 
k3 

लेकिन

Jython 2.5.1+ (Release_2_5_1, Oct 31 2011, 11:44:27) 
[OpenJDK Server VM (Sun Microsystems Inc.)] on java1.6.0_27 
Jython 2.7b1 (default:ac42d59644e9, Feb 9 2013, 15:24:52)  
[OpenJDK Server VM (Sun Microsystems Inc.)] on java1.6.0_27 

k1 
v1 
k2 
v2 
k3 
v3 
+0

धन्यवाद, आशा है कि वे जल्द ही तय हो जाएंगे। – georg

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