2015-08-21 6 views
5

कुछ समय पहले मैंने सोचा था कि ट्यूपल का कन्स्ट्रक्टर () कोष्ठक की एक जोड़ी थी।ट्यूपल्स में ब्रांड्स की आवश्यकता क्यों है?

उदाहरण:

>>> (1,) 
(1,) 
>>> type((1,)) 
<type 'tuple'> 
>>> t = (1,) 
>>> type(t) 
<type 'tuple'> 

लेकिन अब मुझे पता है कि यह अल्पविराम , है।

तो, इसके बाद के संस्करण के रूप में ही कर रही है:

>>> 1, 
(1,) 
>>> type(1,) 
<type 'int'> # Why? 
>>> 1,2,3 
(1,2,3) 

लेकिन अगर मैं कार्य करें:

>>> type(1,2,3) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
TypeError: type() argument 1 must be string, not int 

यह मेरे लिए समझ में आता है, लेकिन:

>>> t = 1,2,3 
>>> type(t) 
<type 'tuple'> 

और अंत में:

>>> type((1,2,3)) 
<type 'tuple'> 

यहां सवाल है: अंतिम मामले में ब्रांड्स की आवश्यकता क्यों है यदि ट्यूपल सिर्फ 1,2,3 है?

+2

प्रकार (1,2,3) पाइथन को भ्रमित कर सकता है क्योंकि 'पैरामीटर को अलग करने के लिए उपयोग किया जाता है। तो ऐसा लगता है कि 1 पहला पैरामीटर है, 2 दूसरा और इसी तरह है। – NendoTaka

+1

https://stackoverflow.com/questions/16017811/when-are-parentheses-required-around-a-tuple – chishaku

+1

'प्रकार (())' के बारे में क्या? वह 'tuple' देता है। –

उत्तर

1

क्योंकि कभी-कभी कोष्ठक के बिना अभिव्यक्ति अस्पष्ट होगी: उनके बिना, आप तीन तर्कों के साथ फ़ंक्शन कॉल कर रहे हैं। चूंकि कुछ कार्यों को तीन तर्क लेने की आवश्यकता होती है, इसलिए एक तीन-तत्व ट्यूपल तर्क व्यक्त करने के लिए एक अलग प्रतिनिधित्व की आवश्यकता होती है। जैसा कि होता है, type() को एक या तीन तर्कों के साथ बुलाया जा सकता है। बाद के मामले में पहला तर्क क्लासनाम होना चाहिए, इसलिए यह पूर्णांक को देखता है जब यह शिकायत करता है।

4

कुछ संदर्भों में, अल्पविरामों का एक और अर्थ है - उदाहरण के लिए, फ़ंक्शन कॉल के कोष्ठक के अंदर, वे पैरामीटर को अलग करते हैं। अपने ट्यूपल के चारों ओर कोष्ठक का एक सेट डालकर यह गारंटी देता है कि यह एक साधारण अभिव्यक्ति संदर्भ में है, जहां अल्पविरामों को ट्यूपल तत्व विभाजक के रूप में व्याख्या किया जाता है।

3

मैं कहूँगा कि टी (1,2,3) है:

>>> t = 1,2,3 
>>> t 
(1, 2, 3) 
>>> type(t) 
<class 'tuple'> 

और वह t = 1,2,3 स्पष्ट parenthesized संस्करण के लिए वाक्यात्मक चीनी, चीनी का एक रूप है कि tuple- के लिए विशेष रूप से अच्छा है खोल।

1

आप तीन इन्स के साथ type पर कॉल करते हैं, जो अधिभारित कार्यान्वयन के लिए अपेक्षित तर्कों से मेल नहीं खाता है।

+0

वह मामला समझ में आता है। – Gocht

1

क्योंकि ब्रांड्स के बिना, type() बिल्ट-इन फ़ंक्शन व्याख्या करेगा कि आपको इसके बजाय तीन पैरामीटर दिए गए हैं।

python official documentation के अनुसार, प्रकार() मई एक या तीन पैरामीटर स्वीकार करता है:

  • प्रकार (वस्तु)
  • प्रकार (नाम, ठिकानों, dict)

और कोष्ठक के साथ आप प्रदान सिर्फ एक पैरामीटर, एक ट्यूपल ऑब्जेक्ट, जो त्रुटि उत्पन्न नहीं करेगा।

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