2012-07-03 8 views
25

संभव डुप्लिकेट:
Understanding kwargs in Pythonफ़ंक्शन हस्ताक्षर में एक चर नाम से पहले * और ** क्या करें?

मैं अजगर कोड का एक टुकड़ा पढ़ा है, और मैं क्या करता है पता नहीं है * और ** इस कोड में मतलब है:

def functionA(self, *a, **kw): 
    // code here 

मुझे बस * के एक उपयोग के बारे में पता है: विधि या कन्स्ट्रक्टर के पैरामीटर के लिए सभी विशेषताएं निकालें।

यदि यह उपरोक्त फ़ंक्शन के लिए सही है, तो शेष क्या है: **?

+4

http में एक शब्दकोश unpacks: // docs.python.org/tutorial/controlflow.html#keyword-arguments –

+1

>। <मैं नहीं करता यह नहीं पता था कि इसे 'क्वांग' – hqt

+2

कहा जाता था, हम जानते हैं कि वाक्यविन्यास के लिए Google करना मुश्किल है। आपका प्रश्न बंद नहीं था क्योंकि लोग सोचते थे कि यह बेवकूफ था - यह बंद था क्योंकि हम SO पर बहुत अधिक डुप्लिकेट जानकारी नहीं चाहते हैं। –

उत्तर

78

प्रिंट होगा एक समारोह हैडर के अंदर:

* एक में सभी स्थितीय तर्क एकत्र करता है tuple

** सभी कीवर्ड तर्क एकत्र करता है I na शब्दकोश

>>> def functionA(*a, **kw): 
     print(a) 
     print(kw) 


>>> functionA(1, 2, 3, 4, 5, 6, a=2, b=3, c=5) 
(1, 2, 3, 4, 5, 6) 
{'a': 2, 'c': 5, 'b': 3} 

एक समारोह कॉल में:

* एक सूची या टपल स्थिति तर्क

** में unpacks कीवर्ड तर्क

>>> lis=[1, 2, 3, 4] 
>>> dic={'a': 10, 'b':20} 
>>> functionA(*lis, **dic) #it is similar to functionA(1, 2, 3, 4, a=10, b=20) 
(1, 2, 3, 4) 
{'a': 10, 'b': 20} 
+0

"स्वयं" की कोई ज़रूरत नहीं है - यह कक्षा परिभाषा के अंदर नहीं है ... –

+0

@AndrewJaffe धन्यवाद! समाधान संपादित किया गया। –

+0

+1 महान स्पष्टीकरण – Levon

5

** निर्दिष्ट तर्क नाम लेता है और उन्हें एक शब्दकोश में डाल देता है। तो:

def func(**stuff): 
    print(stuff) 

func(one = 1, two = 2) 

प्रिंट चाहेंगे:

{'one': 1, 'two': 2} 
1

** साधन कार्यों के तर्कों नाम दिया है।

$ cat 2.py 
def k(**argv): 
    print argv 

k(a=10, b = 20) 

$ python 2.py 
{'a': 10, 'b': 20} 

argv एक शब्दकोश है जिसमें फ़ंक्शन के सभी नामांकित तर्क शामिल हैं।

और आप इसे भी उलट सकते हैं। आप एक समारोह के लिए aruments का एक सेट के रूप में एक शब्दकोश का उपयोग कर सकते हैं:

def k(a=10, b=20): 
    print a 
    print b 

d={'a':30,'b':40} 
k(**d) 

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