2013-08-26 6 views
5

अपने आप को एक कोने फिर में अध्ययन किया ...समारोह (* args, ** kwargs, एक्स) फेंक अवैध वाक्य रचना

def superfunction(*args, **kwargs, k): 
           ^
SyntaxError: invalid syntax 

क्या नियम इम यहाँ तोड़ने? ऐसा लगता है कि आपको * चर के साथ 'नियमित' चर मिश्रण नहीं करना चाहिए, लेकिन मैं इसे किसी को पुष्टि या अस्वीकार करने के लिए नहीं ढूंढ सकता। मैंने कहीं पढ़ा है (और अब मैं निश्चित रूप से नहीं ढूंढ सकता) कि कुछ प्रकार के तर्क पहले आते हैं, मुझे लगता है कि कीवर्ड तर्क, जो मेरे मुद्दे का हिस्सा हो सकता है या नहीं।

+0

यह गलत है कि यह गलत क्यों है Python 2.x और 3.x के बीच थोड़ा अलग है; ट्यूटोरियल अनुभाग [कीवर्ड तर्क] (http://docs.python.org/2/tutorial/controlflow.html#keyword-arguments) और संदर्भ अनुभाग [फ़ंक्शन परिभाषाएं] देखें (http://docs.python.org/ 2/संदर्भ/compound_stmts.html # फ़ंक्शन) आपके उचित संस्करण के लिए विवरण हैं। लेकिन संक्षेप में, '**' पैरामीटर के बाद कुछ भी नहीं आ सकता है। – abarnert

+0

मुझे एक [ब्लॉग पोस्ट] भी मिला है (http://stupidpythonideas.blogspot.com/2013/08/arguments-and-parameters.html) जो पूर्ण विवरण बताता है; मुझे नहीं लगता कि यह सभी नौसिखिया-अनुकूल है ... लेकिन मुझे आशा है कि संदर्भ दस्तावेज़ पढ़ने से कम से कम थोड़ा आसान होगा। (यह पाइथन 3-विशिष्ट है, हालांकि।) – abarnert

उत्तर

13

इस प्रयास करें:

def superfunction(k, *args, **kwargs): 

**kwargs चर कीवर्ड पैरामीटर समारोह घोषणा में पिछले हिस्सा होना चाहिए। दूसरा-टू-आखिरी, *args परिवर्तनीय स्थिति पैरामीटर। (केवल पायथन 3.x में, आप *args और **kwargs के बीच केवल कीवर्ड पैरामीटर भी प्राप्त कर सकते हैं।) और पहले स्थानों में, स्थितित्मक पैरामीटर - यह फ़ंक्शन पैरामीटर घोषित करने का सही तरीका है। अतिरिक्त विवरण के लिए इस post पर एक नज़र डालें।

पूर्ण संदर्भ के लिए, Python 3.x या Python 2.x में फ़ंक्शन परिभाषा अनुभाग देखें।

+1

इसलिए इसके नामित वर्र्स, नाम वर्र्स, *, ** – jason

+0

एकमात्र ऑर्डर मैं इसे काम करने के लिए प्राप्त कर सकता हूं डीफ सुपरफंक्शन (के, एन = 2, * तर्क, ** kwargs): मुझे सही रास्ते पर रखने के लिए धन्यवाद। – jason

+0

अनुवर्ती: def superfunction (k, n = 2, * args, * args2, ** kwargs): एकाधिक * प्रकार तर्क होने से भी एक वाक्यविन्यास त्रुटि फेंकता है। मुझे लगता है कि आप केवल एक की अनुमति है? – jason

4

सिंटेक्स इस तरह होना चाहिए:

def superfunction(k, *args, **kwargs): 

सबसे पहले आप सभी स्थितीय तर्क है, तो गैर कीवर्ड तर्क है, और फिर कीवर्ड तर्क देना।

+0

में वास्तव में संभव है तर्क और पैरामीटर गलत होने के अलावा ... गैर-कीवर्ड तर्क और स्थितित्मक तर्क एक ही बात हैं, इसलिए यह भ्रमित और गलत है। – abarnert

+0

सही क्रम है: स्थितित्मक-या-कीवर्ड पैरा, फिर वैकल्पिक रूप से '* args' (या' * ', केवल पायथन 3.x में), फिर (केवल पायथन 3.x में) कीवर्ड-केवल पैरा, फिर' * * kwargs'। – abarnert

+0

@abarnert आह! क्या यह? मैंने इसे कुछ महीने पहले पढ़ा है, इसलिए मैं तकनीकी शब्द भूल गया हूं, और इसलिए मिश्रण-अप। यह बात बताने के लिए धन्यवाद। –

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