अंतर यह है कि तर्कों को बुलाए गए कार्यों में कैसे पारित किया जाता है। जब आप *
का उपयोग करते हैं, तो तर्क अनपॅक किए जाते हैं (यदि वे एक सूची या टुपल हैं) — अन्यथा, वे बस इस तरह से पास हो जाते हैं।
यहाँ अंतर का एक उदाहरण है:
>>> def add(a, b):
... print a + b
...
>>> add(*[2,3])
5
>>> add([2,3])
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: add() takes exactly 2 arguments (1 given)
>>> add(4, 5)
9
जब मैं *
साथ तर्क पहले से जुड़ा हुआ है, यह वास्तव में दो अलग तर्क है, जो a
और b
रूप add
में पारित किए गए में सूची अनपैक किया। इसके बिना, यह केवल एक तर्क के रूप में सूची में पारित किया।
शब्दकोशों और **
के लिए भी यही मामला है, सिवाय इसके कि वे आदेशित तर्कों के बजाए नामांकित तर्क के रूप में पास किए गए हैं।
>>> def show_two_stars(first, second='second', third='third'):
... print "first: " + str(first)
... print "second: " + str(second)
... print "third: " + str(third)
>>> show_two_stars('a', 'b', 'c')
first: a
second: b
third: c
>>> show_two_stars(**{'second': 'hey', 'first': 'you'})
first: you
second: hey
third: third
>>> show_two_stars({'second': 'hey', 'first': 'you'})
first: {'second': 'hey', 'first': 'you'}
second: second
third: third
तारांकन कोष्ठक से बाहर चर ले :) – LittleQ
के संभावित डुप्लिकेट [ पायथन में kwargs को समझना] (http://stackoverflow.com/questions/1769403/understanding-kwargs-in-python) –