2010-10-18 5 views
30

में एक ऐरे/सूची पास करना मैं एक क्रिया में पाइथन उन्हें कॉल करने के लिए कहता है, क्योंकि मैं सरणी या सूचियों को पास करने के लिए देख रहा हूं।पायथन

def someFunc(*args) 
    for x in args 
     print x 

लेकिन यकीन नहीं है कि अगर यह सही/गलत है:

मैं इस तरह के रूप * args, उपयोग के बारे में कुछ पढ़ा। जैसा कि मैं चाहता हूं काम करने के लिए कुछ भी नहीं लगता है। मैं आसानी से PHP फ़ंक्शन में सरणी पास करने में सक्षम होने के लिए उपयोग किया जाता हूं और यह मुझे भ्रमित कर रहा है। यह भी लगता है कि मैं ऐसा नहीं कर सकते:

def someFunc(*args, someString) 

यह एक त्रुटि निकलती है के रूप में।

मुझे लगता है कि मैंने खुद को पूरी तरह से भ्रमित कर लिया है और किसी के लिए इसे साफ़ करने के लिए ढूंढ रहा हूं।

+1

http://docs.python.org/tutorial/controlflow.html#arbitrary-argument- तारों का उपयोग करने के लिए संक्षेप में विवरण सूचीबद्ध करता है। इसका मतलब है कि आप तर्कसंगत तर्कों को पारित कर सकते हैं, और उन्हें एक टुपल में लपेटा जाएगा (जिसे फ़ंक्शन के भीतर किसी सूची की तरह एक्सेस किया जा सकता है)। तारांकन के साथ एक तर्क नाम आखिरकार आना चाहिए ताकि पाइथन जानता है कि कौन सा है। – JAL

+0

"जैसा कि पाइथन उन्हें कॉल करता है"? यह एक "प्रवृत्ति" नहीं है। यह परिभाषा का मामला है। –

+5

एसएलॉट, शांत हो जाओ! मुझे लगता है कि आप वहां थोड़ा कठोर हो रहे हैं - क्या उस टिप्पणी ने वार्तालाप में कुछ जोड़ा है? नहीं। –

उत्तर

41

प्रकार की सूची में पास जब आप इस वाक्य रचना का उपयोग कर अपने समारोह को परिभाषित:

def someFunc(*args) 
    for x in args 
     print x 

आप यह है कि आप कह रहे हैं तर्कों की एक चर संख्या की उम्मीद है।

def someFunc(myList = [], *args) 
    for x in myList: 
     print x 

तो फिर तुम यह इस के साथ कॉल कर सकते हैं:

items = [1,2,3,4,5] 

someFunc(items) 

आप नामित तर्क परिभाषित करने की जरूरत आप कुछ इस तरह करते हैं चाहते हैं यदि आप एक सूची में पारित करने के लिए (अन्य भाषाओं से सरणी) चाहते हैं परिवर्तनीय तर्क से पहले, और कीवर्ड तर्क से पहले परिवर्तनीय तर्क। आप यह भी प्राप्त कर सकते हैं:

def someFunc(arg1, arg2, arg3, *args, **kwargs) 
    for x in args 
     print x 

जिसके लिए कम से कम तीन तर्क की आवश्यकता होती है, और अन्य तर्कों और कीवर्ड तर्कों की चर संख्याओं का समर्थन करती है।

+8

परिवर्तनीय वस्तुओं का उपयोग डिफ़ॉल्ट तर्क के रूप में करने से सावधान रहें! def someFunc(myList = []): myList.append(1) कुछ फनक बिना तर्क के दो बार बुलाया जाएगा [1, 1], क्योंकि डिफ़ॉल्ट तर्क, केवल एक बार बनाए जाते हैं, जब फ़ंक्शन परिभाषा का मूल्यांकन किया जाता है। –

13

तुम बस अन्य प्रकार की तरह सूचियों पारित कर सकते हैं:

l = [1,2,3] 

def stuff(a): 
    for x in a: 
     print a 


stuff(l) 

इस सूची में एल प्रिंट करता है। ध्यान रखें सूचियों को एक गहरी प्रति के रूप में संदर्भ के रूप में पारित नहीं किया जाता है।

+1

@ एसएलॉट: हां। मेरा मतलब गहरी प्रतिलिपि थी ... इसे पकड़ने के लिए धन्यवाद। – JoshD

4

आपको सूची स्वीकार करने के लिए तारांकन का उपयोग करने की आवश्यकता नहीं है।

सीधे शब्दों में परिभाषा तर्क को कोई नाम दें, और

def takes_list(a_list): 
    for item in a_list: 
     print item 
7

पायथन सूची (जो केवल सरणी नहीं हैं क्योंकि उनके आकार को मक्खी पर बदला जा सकता है) सामान्य पायथन ऑब्जेक्ट्स हैं और किसी भी चर के रूप में कार्यों में पारित किया जा सकता है। * वाक्यविन्यास का उपयोग अनपॅकिंग सूचियों के लिए किया जाता है, जो शायद ऐसा कुछ नहीं है जिसे आप अभी करना चाहते हैं।