2012-05-09 6 views
6

मैं पायथन में स्ट्र ऑब्जेक्ट्स की जांच कर रहा था, और मुझे एहसास हुआ कि पायथन 2.7 में स्ट्र ऑब्जेक्ट में __iter__() विधि और न ही next() विधि है, जबकि पायथन 3.0 स्ट्र ऑब्जेक्ट्स में __iter__() विधि है, और इस प्रकार वे पुन: प्रयोज्य हैं। हालांकि, मैं अभी भी स्ट्र ऑब्जेक्ट्स का उपयोग कर सकता हूं जैसे कि वे पाइथन 2.7 में पुनरावृत्त हैं। उदाहरण के लिए, मैं उन्हें लूप के लिए उपयोग कर सकता हूं। यह कैसे काम करता है?स्ट्र ऑब्जेक्ट में __iter__ नहीं है, फिर भी यह पुनरावर्तनीय कार्य करता है। क्यूं कर?

+0

यह एक डुप्लिकेट है: http://stackoverflow.com/questions/5113133/why-do-python-strings-not-have-iter- कार्यक्षमता – pts

उत्तर

4

सरल उत्तर: क्योंकि iter(s) एक पुनरावृत्त वस्तु देता है।

लंबा उत्तर: iter()__iter__() विधि की तलाश करता है, लेकिन यदि यह कोई नहीं मिलता है तो यह निर्माण और पुनरावर्तक स्वयं की कोशिश करता है। __getitem__() का समर्थन करने वाला कोई भी ऑब्जेक्ट 0 से शुरू होने वाले पूर्णांक इंडेक्स के साथ एक साधारण इटरेटर बनाने के लिए उपयोग किया जा सकता है। __getitem__() सूची/स्ट्रिंग इंडेक्सिंग ऑपरेशंस के पीछे फ़ंक्शन है, उदाहरण के लिए s[0]

>>> "abc".__iter__() 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
AttributeError: 'str' object has no attribute '__iter__' 
>>> iter("abc") 
<iterator object at 0x1004ad790> 
>>> iter("abc").next() 
'a' 

विवरण के लिए here देखें।

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

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