2010-10-15 18 views
5

इस फ़ंक्शन को प्राप्त करें() जो एक ट्यूपल देता है। निम्नलिखित दो असाइनमेंट के बीच क्या अंतर है? कहीं मैंने एक उदाहरण देखा जहां पहला असाइनमेंट इस्तेमाल किया गया था, लेकिन जब मैंने दूसरे की कोशिश की तो मुझे आश्चर्य हुआ कि यह भी काम करता था। तो, क्या वास्तव में कोई अंतर है, या क्या पाइथन सिर्फ यह पता लगाता है कि बाएं हाथ का हिस्सा एक ट्यूपल होना चाहिए?x, y = getPos() बनाम (x, y) = getPos()

def getPos(): 
    return (1, 1) 

(x, y) = getPos() # First assignment 
x, y = getPos() # Second assignment 

उत्तर

8

पर भी काम करता है tuples के बारे में पढ़ें:

एक टपल अल्पविराम के द्वारा अलग मूल्यों की एक संख्या (के होते हैं ...)

तो कोष्टक एक टपल एक टपल नहीं है। कॉमा इसे करते हैं।

कोष्ठक केवल जरूरत है अगर आप अजीब नेस्टेड संरचना है:

x, (y, (w, z)), r 
+2

इसके अलावा एक भी गोल के लिए एलएचएस (बाएं हाथ की ओर) में एक टपल की जरूरत है मूल्य tuple: '(x,)' – fortran

+0

हां, यद्यपि "टुपल पैकिंग" और "टुपल अनपॅकिंग" शब्द का सुझाव है कि यह काफी सरल नहीं है क्योंकि अल्पविराम से अलग सूचियां हमेशा शाब्दिक tuples होती हैं। – Skilldrick

+1

उदाहरण के लिए, 'टाइप (1, 2, 3)' 'tuple' वापस नहीं करता है। – Skilldrick

5

हाँ, यह कहा जाता है tuple unpacking:

"टपल unpacking की आवश्यकता है बाईं तरफ चर की सूची टपल की लंबाई के रूप में तत्वों की एक ही नंबर है।" - Guido Van Rossum

"जब आप = के बाईं तरफ टुपल्स या सूचियों का उपयोग करते हैं, तो पाइथन जोड़े बाईं तरफ के लक्ष्यों के साथ दाईं तरफ ऑब्जेक्ट करता है और उन्हें बाएं से दाएं को असाइन करता है।" - लुट्ज़ और Ascher

3

हाँ, और यह सूची

>>> x,y,z = range(3) 
>>> print x, y, z 
0 1 2 
>>> 
4

कोई अंतर नहीं है:

>>> import dis 
>>> dis.dis(compile("a,b = expr()", "", "single")) 
    1   0 LOAD_NAME    0 (expr) 
       3 CALL_FUNCTION   0 
       6 UNPACK_SEQUENCE   2 
       9 STORE_NAME    1 (a) 
      12 STORE_NAME    2 (b) 
      15 LOAD_CONST    0 (None) 
      18 RETURN_VALUE   
>>> dis.dis(compile("(a,b) = expr()", "", "single")) 
    1   0 LOAD_NAME    0 (expr) 
       3 CALL_FUNCTION   0 
       6 UNPACK_SEQUENCE   2 
       9 STORE_NAME    1 (a) 
      12 STORE_NAME    2 (b) 
      15 LOAD_CONST    0 (None) 
      18 RETURN_VALUE   

दोनों a, b और (a, b) एक टपल निर्दिष्ट करें, और आप टपल unpacking :)

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