SORU
29 Mayıs 2013, ÇARŞAMBA


Python yineleyici davranış ve sonraki(yineleyici)listesi

Düşünün:

>>> lst = iter([1,2,3])
>>> next(lst)
1
>>> next(lst)
2

Yani, yineleyici ilerleyen beklendiği gibi, aynı nesne mutasyona tarafından ele.

Bu durumda, beklerim:

a = iter(list(range(10)))
for i in a:
   print(i)
   next(a)

atlamak her ikinci unsur: çağrı next gerektiğini ileri yineleyici sonra, örtülü çağrı yapılmış döngü gerektiğini ileri ikinci kez - ve sonuç bu ikinci çağrı olurdu atanan i.

Değil. Döngü yazdırırtümherhangi bir atlama olmadan listedeki öğeleri.

İlk aklıma gelen bu olabileceğini çünkü döngü aramalar iter ne geçti, ve bu olabilir, bir bağımsız yineleyici - bu değil de var iter(a) is a.

Neden next Bu durumda yineleyici önceden görünmüyor?

CEVAP
29 Mayıs 2013, ÇARŞAMBA


Seni görmek ne olduğunutercümannext() dönüş değeri yankılanan geri:

>>> a = iter(list(range(10)))
>>> for i in a:
...    print(i)
...    next(a)
... 
0
1
2
3
4
5
6
7
8
9

Eğer next() çıkış atarsanız şey beklendiği gibi çalışır

>>> a = iter(list(range(10)))
>>> for i in a:
...    print(i)
...    _ = next(a)
... 
0
2
4
6
8

ya da baskı ekstra bilgi:

>>> a = iter(list(range(10)))
>>> for i in a:
...    print('Printing: {}'.format(i))
...    next(a)
... 
Printing: 0
1
Printing: 2
3
Printing: 4
5
Printing: 6
7
Printing: 8
9

Diğer bir deyişle, next() yineleyici sonraki değerini verir, çünkü beklenen, ama çalışıyor, döngü kendi yineleyici kendi kopyasını vardır inanmak bir şekilde açtı.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • BMG Rentals Property Management

    BMG Rentals

    23 Mayıs 2011
  • Breno Rises

    Breno Rises

    7 Ocak 2014
  • Ciaran Blumenfeld

    Ciaran Blume

    20 NİSAN 2009