पायथन 2.6+ और 3. * के पास अगला() है, लेकिन प्री-2.6 केवल object.next विधि प्रदान करता है। अगली() शैली को पूर्व-2.6 में प्राप्त करने का कोई तरीका है; कुछ "अगला अगला():" शायद निर्माण?def अगला()? (object.next विधि के बजाय)
उत्तर
class Throw(object): pass
throw = Throw() # easy sentinel hack
def next(iterator, default=throw):
"""next(iterator[, default])
Return the next item from the iterator. If default is given
and the iterator is exhausted, it is returned instead of
raising StopIteration.
"""
try:
iternext = iterator.next.__call__
# this way an AttributeError while executing next() isn't hidden
# (2.6 does this too)
except AttributeError:
raise TypeError("%s object is not an iterator" % type(iterator).__name__)
try:
return iternext()
except StopIteration:
if default is throw:
raise
return default
(throw = object()
भी काम करता है, लेकिन, जब निरीक्षण उदा help(next)
। None
उपयुक्त नहीं है यह बेहतर डॉक्स उत्पन्न करता है, क्योंकि आप next(it)
और next(it, None)
अलग ढंग से इलाज करना होगा।)
आर पेट एक अच्छा है करने के लिए लगता है जवाब। एक अतिरिक्त घंटी जोड़ने के लिए: यदि आप अजगर के कई अलग अलग संस्करणों पर चलने के लिए कोड लिख रहे हैं, तो आप परिभाषा conditionalize कर सकते हैं:
try:
next = next
except NameError:
def next():
# blah blah etc
इस तरह आप next
किसी भी मामले में परिभाषित किया गया है, लेकिन आप का उपयोग कर रहे कार्यान्वयन में बनाया गया जहां यह उपलब्ध है।
मैं next = next
उपयोग करती हैं इसलिए है कि मैं अपने कोड का उपयोग में एक मॉड्यूल में इस परिभाषा रख सकते हैं, तो कहीं और:
from backward import next
परीक्षण अभी अगला नहीं हो सकता है? जैसे कोशिश करो: अगला; सिवाय इसके कि ... ' –
इसे मेरे प्रोजेक्ट में इन परिभाषाओं को शामिल करने के तरीके से करना है। मैंने जवाब उतार दिया है। –
सरल विधि:
import operator
next = operator.methodcaller("next")
नेड की एक try
में डालने के बारे में सुझाव ब्लॉक यहां भी काम करता है, लेकिन यदि आप उस मार्ग पर जा रहे हैं, तो एक मामूली नोट: पायथन 3 में, गैर-इटरेटर पर next()
पर कॉल करने से TypeError
बढ़ जाता है, जबकि यह संस्करण AttributeError
उठाएगा।
संपादित करें: कभी भी ध्यान न दें। स्टीव बताते हैं, operator.methodcaller()
केवल 2.6 में पेश किया गया था, जो शर्म की बात है।
मैंने किसी ऑब्जेक्ट पर 'अगला()' को कॉल करते समय 'AttributeError' को बढ़ाने के लिए R.Pate के उत्तर को संपादित किया है जिसमें' .next() 'विधि नहीं है। – steveha
'operator.methodcaller() 'दिलचस्प लग रहा है, लेकिन इसे पायथन 2.6 में जोड़ा गया था। आर। पेट का जवाब किसी भी पायथन में इटरेटर के साथ काम करना चाहिए। – steveha
- 1. def self.up क्या करें, def up, self.down def def, मतलब def def?
- 2. विधि परिभाषा के बारे में उलझन में: def req = (अनुरोध)
- 3. विधि पैरामीटर के बजाय पासिंग हैश
- 4. Java.util.Collection क्यों नहीं है(), अगला अगला() है?
- 5. itertools.cycle()। अगला()?
- 6. क्या 'def self.myMethod` और' def myMethod` 'के बीच कोई अंतर है?
- 7. परिभाषित करने के बजाय def और defn का उपयोग करने के पीछे तर्क क्या है?
- 8. SqlAlchemy पिछला/अगला एक्सेसर्स?
- 9. एक्सटेंशन विधि के बजाय वीबी एक्सटेंशन संपत्ति
- 10. स्कैला को "def foo" और "def foo()" के बीच का अंतर कैसे पता चलता है?
- 11. .def फ़ाइलें सी/सी ++ डीएलएल
- 12. def 'self.function` नाम का क्या अर्थ है?
- 13. जावास्क्रिप्ट node.js अगला()
- 14. क्यों "(def vowel? (Set" aeiou "))" काम?
- 15. गिट: परिवर्तन देखने के लिए अगला पुश
- 16. रचनाकारों की बजाय "प्रारंभिक()" विधि के खिलाफ तर्क
- 17. jQuery - "लाइव()" के बजाय "चालू()" विधि का उपयोग कैसे करें?
- 18. "नया" उपयोग करने के बजाय एक बनाएँ विधि क्यों है?
- 19. अलग तथाकथित एम्बेडेड क्वेरी के बजाय एक विधि कॉल
- 20. नियंत्रण प्रवाह में अगला उपयोग
- 21. ग्रहण "अगला विवरण सेट करें"
- 22. वेबव्यू अगला/पिछला पृष्ठ संक्रमण
- 23. jQuery साइकिल प्लगइन पिछला/अगला
- 24. jQuery - अगला चयन तत्व खोजें
- 25. डेटाटाइम पायथन - अगला व्यवसाय दिवस
- 26. std :: सूची इटरेटर: अगला तत्व
- 27. LINQ सूची में अगला आइटम
- 28. सेक [टी] के बजाय स्ट्रिंग को वापस करने के लिए सेक [टी] लेना विधि
- 29. (। *) के बजाय (। *?)
- 30. व्युत्पन्न वर्ग विधि के बजाय बेस क्लास विधि क्यों कहा जाता है?
@ पैंट्सगोलेम ने इंगित किया कि पाइथन 3 में, 'अगला()' 'टाइपरर' उठाता है जब आप इसे गैर-पुनरावर्तक पर कॉल करते हैं। मैंने इस विशेषता को 'एट्रिब्यूट एरर' पकड़ने के लिए संपादित किया और इसे 'टाइप एरर' के रूप में फिर से उठाया। (मुझे आशा है कि यह अच्छा स्टैक ओवरफ्लो शिष्टाचार है; यह पहली बार है जब मैंने किसी और के जवाब को संपादित किया है!) – steveha
अधिक महत्वपूर्ण बात यह है कि 2.6 में अगला() उस मामले में TypeError उठाता है। इसे शामिल करने के लिए संपादन मेरे द्वारा ठीक है, हालांकि मैंने raise को संशोधित किया है। –