2012-12-15 4 views
5
def foo(a, b, c): 
print a+b+c 

i = [1,2,3] 

क्या मुझे foo (i) पर स्पष्ट अनुक्रमण के बिना कॉल करने का कोई तरीका है? foo से बचने की कोशिश (i [0], मैं [1], मैं [2])क्या फ़ंक्शन के तर्कों पर एक सूची को विस्फोट करने का एक और अधिक महत्वपूर्ण तरीका है?

+0

कई बार फ़ंक्शन परिभाषा में प्रयुक्त होता है, तो कॉल करते समय इसका उपयोग क्यों न करें ... मेरे पायथन हेड दोस्तों को वापस करने के लिए धन्यवाद। खेल के नाम को छोड़ने के लिए – rutherford

उत्तर

9

हाँ, foo(*i) का उपयोग करें:

>>> foo(*i) 
6 

तुम भी समारोह परिभाषा * उपयोग कर सकते हैं: def foo(*vargs) एक टपल vargs कहा जाता है में सभी गैर कीवर्ड तर्क डालता है। । और ** का उपयोग करते हैं, उदाहरण के लिए, def foo(**kargs), एक शब्दकोश kargs कहा जाता है में सभी कीवर्ड तर्क रखा जाएगा:

>>> def foo(*vargs, **kargs): 
     print vargs 
     print kargs 

>>> foo(1, 2, 3, a="A", b="B") 
(1, 2, 3) 
{'a': 'A', 'b': 'B'} 
3

हाँ, अजगर का समर्थन करता है कि:

foo(*i) 

Unpacking Argument Lists पर दस्तावेज़ देखें। किसी भी चीज़ के साथ काम करता है। दो सितारों के साथ ** यह डिक्ट्स के लिए काम करता है और तर्कों का नाम देता है।

def bar(a, b, c): 
    return a * b * c 
j = {'a': 5, 'b': 3, 'c': 2} 

bar(**j) 
4

यह argument unpacking कहा जाता है और इसके लिए एक ऑपरेटर है।

foo(*i) 

वैसे, यह सूचियों के साथ ही किसी भी अस्थिर के साथ काम करता है।

+0

+1। वास्तव में यह किसी भी भाषा के लिए इस चीज़ को Google में मदद करने में मदद करता है। बहुत बहुत धन्यवाद। –

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

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