2013-01-13 28 views
85

फ़ंक्शन के तर्कों में एक नंगे तारांकन क्या करता है?फ़ंक्शन तर्क में पायथन नंगे तारांकन

जब मैं अचार मॉड्यूल को देखा, मैं इस देखें: (http://docs.python.org/3.3/library/pickle.html#pickle.dump)

pickle.dump(obj, file, protocol=None, *, fix_imports=True) 

मैं एक के बारे में पता तर्कों से पहले एकल और डबल तारांकन (तर्कों की परिवर्तनीय संख्या के लिए), लेकिन इससे पहले कुछ भी नहीं है। और मुझे पूरा यकीन है कि इसमें अचार के साथ कुछ लेना देना नहीं है। शायद यह इस घटना का एक उदाहरण है। जब मैंने इसे दुभाषिया को भेजा तो मैंने केवल इसका नाम सीखा:

>>> def func(*): 
...  pass 
... 
    File "<stdin>", line 1 
SyntaxError: named arguments must follow bare * 

यदि यह महत्वपूर्ण है, तो मैं पाइथन 3.3.0 पर हूं।

उत्तर

85

बेयर * कॉलर को नामित तर्कों का उपयोग करने के लिए मजबूर करने के लिए उपयोग किया जाता है - इसलिए जब आप कोई निम्न कीवर्ड तर्क नहीं देते हैं तो आप * के साथ एक फ़ंक्शन को परिभाषित नहीं कर सकते हैं। अधिक जानकारी के लिए

this answer या Python 3 documentation देखें।

+0

ध्यान दें कि '* args' समेत सभी स्थितित्मक (अनामित) तर्क,' * 'से पहले होना चाहिए। – BallpointBen

17

जबकि मूल उत्तर पूरी तरह से प्रश्न का उत्तर देता है, बस कुछ संबंधित जानकारी जोड़ रहा है। एकल तारांकन के लिए व्यवहार PEP-3102 से निकला है। संबंधित अनुभाग का हवाला देते हुए:

The second syntactical change is to allow the argument name to 
be omitted for a varargs argument. The meaning of this is to 
allow for keyword-only arguments for functions that would not 
otherwise take a varargs argument: 

    def compare(a, b, *, key=None): 
     ... 

सरल अंग्रेज़ी में, इसका मतलब है कि कुंजी के लिए मूल्य पारित करने के लिए, आप स्पष्ट रूप से key="value" के रूप में यह पारित करने के लिए की आवश्यकता होगी।