2011-08-10 16 views
16

हर कोई जानता है कि अजगर कार्य में कोई मान नहीं है, शायद if बयान पर कार्य से बचने के लिए जब आम तौर पर सिर्फ एक तुलना करना है:असाइनमेंट बयान मूल्य

>>> if a = b: 
    File "<stdin>", line 1 
    if a = b: 
     ^
SyntaxError: invalid syntax 

>>> if a == b: 
...  pass 
... 

उसी कारण से, एक है कि कई संदेह सकता है उसी कथन पर असाइनमेंट सिंटैक्स त्रुटियां भी थीं।

>>> a = (b = 2) 
    File "<stdin>", line 1 
    a = (b = 2) 
     ^
SyntaxError: invalid syntax 

तो, मेरे सवाल है:

वास्तव में, a = (b = 2) एक वैध एक्सप्रेशन नहीं है यही कारण है कि अजगर में a = b = 2 काम करता है के रूप में यह अन्य भाषाओं जहां काम बयानों एक मूल्य है में काम करता है, सी की तरह?

>>> a = b = c = 2 
>>> a, b, c 
(2, 2, 2) 

क्या यह व्यवहार दस्तावेज है? मैं काम के बयान दस्तावेज में इस बारे में कुछ भी नहीं मिला सकता है: http://docs.python.org/reference/simple_stmts.html#assignment-statements

उत्तर

24

यह वाक्य रचना में सही नहीं है:

assignment_stmt ::= (target_list "=")+ (expression_list | yield_expression) 

छोटे +(target_list "=")+ के अंत में अर्थ है "एक या अधिक"। तो लाइन a = b = c = 2 में 3 असाइनमेंट कथन शामिल नहीं हैं, लेकिन एक एकल असाइनमेंट स्टेटमेंट 3 लक्ष्य सूचियों के साथ है।

बदले में प्रत्येक लक्ष्य सूची में केवल एक ही लक्ष्य (इस मामले में एक पहचानकर्ता) शामिल है।

यह पाठ (जोर मेरा) में भी बताया गया है:

एक काम बयान [...] के लिए एकल जिसके परिणामस्वरूप वस्तु प्रदान करती है सूचीबद्ध करता है लक्ष्य में से प्रत्येक, बाएं से दाएं।

यह दिलचस्प परिणाम मिल सकते हैं:

>>> (a,b) = c = (1,2) 
>>> (a, b, c) 
(1, 2, (1, 2)) 
0

एक और अच्छा उदाहरण:

>>a,b,c = b = 1,2,3 
>>b 
(1, 2, 3) 

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

  • कोई संबंधित समस्या नहीं^_^