Python 2.6+ ve 3. * sonraki() seçeneğine sahiptir, ancak 2.6 öncesi ise yalnızca object.next yöntemini sunar. 2.6 öncesi önceki() stilini elde etmenin bir yolu var mı? Bazı "def next():" belki de inşaat?def next() Python pre-2.6 için? (object.next yöntemi yerine)
cevap
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()
çok çalışır, ancak None
uygun değildir mesela help(next)
., Teftiş yaparken farklı next(it)
ve next(it, None)
tedavi gerekir çünkü bu, daha iyi dokümanlar üretir.)
R. Pate iyi gibi görünüyor Cevap. Eğer Python birçok farklı sürümlerinde çalışacak kod yazıyorsanız, sen tanımını conditionalize edebilirsiniz: Bir ilave çan eklemek için
try:
next = next
except NameError:
def next():
# blah blah etc
Eğer her durumda tanımlanan next
aynı olur, ancak kullandığınız mevcut olduğu yerde uygulamaya geçirilmiştir. Benim kodu kullanılıyor sonra başka bir yerde, bir modülde bu tanımı koymak, böylece
Ben next = next
kullanın:
from backward import next
Test sadece sıradaki olamaz mı? Örneğin. deneyin: sonraki; hariç ... ' –
Bu tanımları projeme dahil etme şeklimizle ilgisi var. Cevabı ben verdim. –
basit yöntemi: Bir try
koyarak yaklaşık
import operator
next = operator.methodcaller("next")
Ned'in öneri blok burada da çalışır, ancak bu rotaya gidecekseniz, küçük bir not: Python 3'te, next()
'u yineleyici olmayan bir numaraya çağırmak, TypeError
'u yükseltirken, bu sürüm bunun yerine AttributeError
'u yükseltecektir.
Düzenleme: boşver. Steveha'nın işaret ettiği gibi, operator.methodcaller()
sadece 2.6'da tanıtıldı, bu utanç verici.
Bir '.next()' yöntemine sahip olmayan bir nesnede 'next()' yi çağırırken 'AttributeError 'öğesini yükseltmek için R.Pate'in yanıtını düzenledim. – steveha
'operator.methodcaller()' ilginç görünüyor, ancak Python 2.6'da eklendi. R.Pate'in cevabı, yineleyici ile herhangi bir Python'da çalışmalıdır. – steveha
- 1. Def yöntemi (parametre = Yok) ne demektir?
- 2. Java boş bir karakterle yerine yöntemi yerine
- 3. Python os.path.walk() yöntemi
- 4. WET yöntemi yerine POST gönderme
- 5. Python geri alma yöntemi alay
- 6. jQuery: this: "$ (this) .next(). Next()" çalışır, ancak "$ (this) .next ('. Div')" değil
- 7. Python nesnesi için fabrika yöntemi - en iyi uygulama
- 8. Python 2.6 neden bir global next() işlevi ekledi?
- 9. Python Dize kodlama yöntemi
- 10. python dizgisi yerine koyma
- 11. Python değiştirip yerine
- 12. StopIteration yerine None döndürmek için bir Python jeneratörü nasıl alabilirim?
- 13. System.arrayCopy() yöntemi yerine java'da bayt dizisi birleştirilir.
- 14. Statik bir python getitem yöntemi nasıl yazılır?
- 15. Her Sınıf Yöntemi yürütme öncesinde belirli bir yöntemi nasıl çağırır?
- 16. Python yöntemi araması, static vs. örneği
- 17. Python Nose2 Sınıf Yöntemi Çağrıldığında Sonlanmayan Testler
- 18. ndb aysnc "verim next" i tüketmek için get_multi_async
- 19. Neden python statik/sınıf yöntemi callable değil?
- 20. çıplak yıldız: def f (*)
- 21. Python Boolean yöntemi ad okunabilirliği
- 22. Jeneratör İfadesi vs verim: Neden 'next()' çalışmıyor?
- 23. Clojure içinde "def" yeniden tanımlanması
- 24. Julia işlev argüman türü def
- 25. Java paketleri: no class def
- 26. Excel için For ve Next döngüsündeki Kaydetme Sonucu Sonuç
- 27. Python 2.7'yi Kullanmak İçin Zorlama Amaçları 3.4 yerine
- 28. Python PIL için bir antialiasing yöntemi var mı?
- 29. Jquery Select öğesi 2 konumu daha fazla - başka bir yol .next(). Next()
- 30. SELECT NEXT VALUE, SQL Server'da nasıl çalışır?
@pantsgolem, Python 3'te 'next()' ifadesinin, non-iterator'da çağırdığınızda 'TypeError 'öğesini yükselttiğine dikkat çekti. AttributeError 'ı yakalamak ve' TypeError 'olarak yeniden yükseltmek için bu cevabı düzenledim. (Bu iyi StackOverflow görgü umut; bu başkasının cevap düzenledikten ilk kez!) – steveha
Daha da önemlisi, 2.6() sonraki bu durumda TypeError yükseltir. Yükseltmeyi değiştirdim olsa da, benim tarafımdan düzenlemek benim için iyi. –