2009-03-17 15 views
14

Ben python2.6 bir sonraki() o list of global functions var ilave fark ettim. Python 2.6 neden bir global next() işlevi ekledi?

Retrieve the next item from the iterator by calling its next() method. 

default verilirse, bu eğer yineleyici tükendiğinde döndürülür

next(iterator[, default])

, aksi StopIteration yükseltilir. Bu eklemek için motivasyon nedir

oldu? Eğer iterator.next() ve StopIteration işlemek için bir except maddesi ile ilgisi olamayacağını next(iterator) ile neler yapabilirsiniz ?

cevap

18

Sadece len() gibi fonksiyonları ile tutarlılık için. next(i)'un dahili olarak i.__next__() numaralı telefonu aradığını düşünüyorum.

O içten __next__ çağırır http://www.python.org/dev/peps/pep-3114/

+0

+ 1. Aynı sebepten Python yerleşik bir len() işlevine sahiptir. Guido'nun mantığına bağlantı için http://stackoverflow.com/questions/83983/why-isnt-the-len-function-inherited-by-dictionaries-and-lists-in-python adresine verilen yanıtı inceleyin. –

+0

+1: Belgelere alıntı yapın. –

0

Bkz, ama buna 'nesne yönelimli' daha 'işlevsel' görünmesini sağlar. Bu sadece benim görüşüm, ama ben sevmiyorum Bak next(i) yerine i.next(). Ama Steve Mc'nin söylediği gibi, aynı zamanda tutarlılıkla biraz yardımcı olur.

10

Python 3.0+ sürümünde next yönteminin __next__ olarak yeniden adlandırıldığını unutmayın. Bunun nedeni tutarlılıktır. next özel bir yöntemdir ve özel yöntemler çift başlı ve arka alt çizgi ile kongre (PEP 8) ile adlandırılmıştır. Özel yöntemlerin doğrudan çağrılması amaçlanmamıştır, bu nedenle işlevde bulunan next tanıtılmıştır.

İlgili konular