Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> Python

पायथन में str () बनाम repr ()?

पायथन में str () और repr () दोनों विधियों का उपयोग स्ट्रिंग के स्ट्रिंग प्रतिनिधित्व के लिए किया जाता है। हालांकि वे दोनों एक ही उद्देश्य की सेवा करते प्रतीत होते हैं, लेकिन उनमें थोड़ा अंतर है।

क्या आपने कभी गौर किया है कि जब आप एक पाइथन बिल्ट-इन फंक्शन str(x) कहते हैं तो क्या होता है जहां x कोई भी वस्तु है जिसे आप चाहते हैं? str(x) का रिटर्न मान दो तरीकों पर निर्भर करता है:__str__ डिफ़ॉल्ट विकल्प है और __repr__ फ़ॉलबैक के रूप में।

आइए पहले देखें कि अजगर डॉक्स उनके बारे में क्या कहते हैं -

>>> help(str)
Help on class str in module builtins:

class str(object)
| str(object='') -> str
| str(bytes_or_buffer[, encoding[, errors]]) -> str
|
| Create a new string object from the given object.

>>> help(repr)
Help on built-in function repr in module builtins:

repr(obj, /)
Return the canonical string representation of the object.

For many object types, including most builtins, eval(repr(obj)) == obj.

आइए अब इन दो तरीकों को कुछ उदाहरणों से समझने की कोशिश करते हैं

>>> str(123)
'123'
>>> repr(123)
'123'
>>> #Above we see- with integer data, there is no difference
>>> #Now let's try string data on these two methods
>>> str('Python')
'Python'
>>> repr('Python')
"'Python'"

पूर्णांक मान के लिए repr () और str () के रिटर्न समान हैं, लेकिन स्ट्रिंग के लिए रिटर्न मानों में अंतर है - एक औपचारिक है और दूसरा अनौपचारिक है।

अब यदि आप आधिकारिक पायथन प्रलेखन द्वारा जाते हैं - __str__ का उपयोग किसी वस्तु के "अनौपचारिक" (पठनीय) स्ट्रिंग प्रतिनिधित्व को खोजने के लिए किया जाता है, जबकि __repr__ का उपयोग किसी वस्तु के "आधिकारिक" स्ट्रिंग प्रतिनिधित्व को खोजने के लिए किया जाता है।

औपचारिक और अनौपचारिक अभ्यावेदन के बीच का अंतर यह है कि str मान के लिए __repr__ के डिफ़ॉल्ट कार्यान्वयन को eval के तर्क के रूप में कहा जा सकता है, और वापसी मान एक मान्य स्ट्रिंग ऑब्जेक्ट होगा। यह फ़ंक्शन (repr ()) एक स्ट्रिंग लेता है और इसकी सामग्री को अजगर कोड के रूप में मूल्यांकन करता है।

तो जब हम इसे "'पायथन'" पास करते हैं, तो इसका काम होता है। हालाँकि, 'पायथन' एक त्रुटि का कारण बनता है क्योंकि इसकी व्याख्या चर पायथन के रूप में की जाती है जो निश्चित रूप से अपरिभाषित है। इसे समझने के लिए नीचे दिया गया कोड है -

>>> x = "Python"
>>> repr(x)
"'Python'"
>>> x1 = eval (repr(x))
>>> x == x1
True

इसलिए यदि हम __str__ के वापसी मान को eval के तर्क के रूप में कॉल करने का प्रयास करते हैं, तो यह विफल हो जाता है।

>>> y = "Python"
>>> str(y)
'Python'
>>> y1 = eval(str(y))
Traceback (most recent call last):
File "<pyshell#51>", line 1, in <module>
y1 = eval(str(y))
File "<string>", line 1, in <module>
NameError: name 'Python' is not defined

दोनों के बीच अंतर प्रदर्शित करने के लिए एक और उदाहरण है -

>>> import datetime
>>> now = datetime.datetime.now()
>>> str(now)
'2019-03-29 01:29:23.211924'
>>> repr(now)
'datetime.datetime(2019, 3, 29, 1, 29, 23, 211924)'

उपरोक्त आउटपुट में, str(now) एक स्ट्रिंग की गणना करता है जिसमें अभी का मान होता है जबकि repr(now) फिर से हमारे नाउ ऑब्जेक्ट को फिर से बनाने के लिए आवश्यक पायथन कोड देता है।

मुख्य अंतर

str()
<वें शैली ="पाठ-संरेखण:केंद्र;">प्रतिनिधि ()
वस्तु को पढ़ने योग्य बनाएं
आवश्यक कोड जो वस्तु को पुन:उत्पन्न करता है
अंतिम उपयोगकर्ता के लिए आउटपुट जेनरेट करें
डेवलपर के लिए आउटपुट जेनरेट करें

अपनी कक्षाओं के लिए __str__ और __repr__ लिखते समय उपरोक्त बिंदुओं पर विचार किया जाना चाहिए।


  1. issuperset () पायथन में

    इस लेख में, हम पायथन में issuperset() और विभिन्न क्षेत्रों में इसके कार्यान्वयन के बारे में जानेंगे। यह विधि बूलियन ट्रू लौटाती है यदि एक सेट बी के सभी तत्वों में सभी तत्व सेट ए होते हैं जो एक तर्क के रूप में पारित होते हैं और यदि ए के सभी तत्व बी में मौजूद नहीं होते हैं तो झूठा रिटर्न देता है। इस

  1. कैसे जांचें कि पाइथन में एक चर का प्रकार स्ट्रिंग है या नहीं?

    हम यह जांचने के लिए isinstance(var, class) का उपयोग कर सकते हैं कि var दिए गए वर्ग का उदाहरण है या नहीं। Python 2.x में str और unicode का बेस क्लास बेसस्ट्रिंग है। तो हम इसे इस प्रकार उपयोग कर सकते हैं: >>> s = 'A string' >>> isinstance(s, basestring) True >>> isin

  1. पायथन में एक सीमांकक द्वारा स्ट्रिंग को कैसे विभाजित करें?

    पायथन के स्ट्रिंग वर्ग में स्प्लिट () नामक एक विधि है जो एक सीमांकक को वैकल्पिक तर्क के रूप में लेती है। इसके लिए डिफ़ॉल्ट डिलीमीटर व्हाइटस्पेस है। आप इसे निम्न तरीके से उपयोग कर सकते हैं: >>> 'aa-ab-ca'.split('-') ['aa', 'ab', 'ca'] >>> '