यह सवाल काफी लंबा होने जा रहा है, इसलिए मैं preemptively माफी माँगता हूँ।अतिरिक्त स्थितित्मक तर्क, अनपॅकिंग तर्क सूचियों या tuples, और विस्तारित iterable unpacking
अजगर में हम निम्नलिखित तीन मामलों में * का उपयोग कर सकते हैं:
मैं जब इस तरह के रूप in this example एक समारोह है कि हम युक्तियों के स्वेच्छाचारी संख्या के साथ प्रतिदेय होना चाहते हैं, को परिभाषित:
def write_multiple_items(file, separator, *args):
file.write(separator.join(args))
इस मामले में, अतिरिक्त स्थितित्मक तर्क tuple में एकत्र किए जाते हैं।
II। रिवर्स मामला है, जब तर्क या तो एक सूची या एक टपल में पहले से ही कर रहे हैं और हम एक समारोह कॉल ऐसे in this example के रूप में अलग स्थितीय तर्क, की आवश्यकता होती है के लिए उन्हें खोल करना चाहते हैं:
>>> range(3, 6) # normal call with separate arguments
[3, 4, 5]
>>> args = [3, 6]
>>> range(*args) # call with arguments unpacked from a list
[3, 4, 5]
तृतीय। अजगर 3 के साथ शुरू, * भी विस्तारित सूची या टपल खोल के संदर्भ में, इस तरह के रूप में in this example tuples के लिए प्रयोग किया जाता है:
>>> a, *b, c = range(5)
>>> b
[1, 2, 3]
या सूचियों के लिए:
>>> [a, *b, c] = range(5)
>>> b
[1, 2, 3]
दोनों में मामलों में, अनावश्यक होने वाली सभी वस्तुओं को अनिवार्य रूप से किसी भी अनिवार्य अभिव्यक्ति को असाइन नहीं किया गया है, उन्हें सूची पर असाइन किया गया है।
तो यहाँ सवाल है: मामले में मैं अतिरिक्त args एक टपल में एकत्र कर रहे हैं, जबकि मामले तृतीय में अतिरिक्त आइटम एक सूची को सौंपा है। इस विसंगति से कहां से?
हालांकिसंभव बताए गए परिवर्तनों थे:
[...]
तारांकित लक्ष्य बनाओ एक सूची की एक टपल बजाय केवल स्पष्टीकरण मैं मिल सकता है पीईपी 3132 जो कहता है कि में था । यह एक फ़ंक्शन के * तर्क, के साथ संगत होगा, लेकिन परिणाम को और अधिक कठिन बनाना होगा।
, एक शैक्षणिक दृष्टिकोण से स्थिरता की इस कमी, समस्याग्रस्त विशेष रूप से यह देखते हुए कि अगर तुम परिणाम पर कार्रवाई करने के लिए चाहते थे, तो आप हमेशा कह सकते हैं सूची (ख) (उपरोक्त उदाहरण में ख संभालने एक टपल था)। क्या मैं कुछ भूल रहा हूँ?
उत्तर के लिए धन्यवाद। संक्षेप में जो मैं सुन रहा हूं वह यह है कि ** ** ** को एक सूची देने के लिए डिजाइन किया जाना चाहिए था। –
@Alexandros, यह वास्तव में मेरी राय है - लेकिन निश्चित रूप से हिंडसाइट 20/20 है, और यह निर्णय किया गया था ... मुझे यकीन नहीं है कि, लेकिन यह 11 साल पहले पाइथन 1.5.2 में पहले से ही था। –