Python'da bir jeneratör işlevinden bir seferde bir değer nasıl elde edilir?


113

Çok basit soru - Python'da bir jeneratörden nasıl bir değer elde edilir?

Şimdiye kadar yazarak bir tane alabileceğimi buldum gen.next(). Bunun doğru yol olduğundan emin olmak istiyorum.

Yanıtlar:



66

Python <= 2.5'te kullanın gen.next() . Bu, tüm Python 2.x sürümleri için çalışacak, ancak Python 3.x için geçerli olmayacaktır.

Python> = 2.6'da, şunu kullanın next(gen) . Bu yerleşik bir işlevdir ve daha nettir. Ayrıca Python 3'te de çalışacaktır.

Bunların her ikisi de, next()alt sınıflandırma ile geçersiz kılınabilen özel olarak adlandırılmış bir işlevi çağırır . Ancak Python 3'te bu işlev, __next__()diğer özel işlevlerle tutarlı olması için olarak yeniden adlandırılmıştır .


16

Kullanım (python 3 için)

next(generator)

İşte bir örnek

def fun(x):
    n = 0
    while n < x:
        yield n
        n += 1
z = fun(10)
next(z)
next(z)

yazdırmalı

0
1


2

Python 3 ve üzerinde bir jeneratör nesnesiyle ilişkili değeri elde etmek için kullanın next(<your generator object>). next () için sonraki çağrılar, kuyrukta birbirini izleyen nesne değerleri üretir.


1

Python 3'te sahip değilsiniz gen.next(), ancak yine de kullanabilirsiniz next(gen). Bana sorarsan biraz tuhaf ama öyle.


1
O kadar tuhaf değil. Python 3'ün bir şeyleri kırması ve yalnızca daha net ve daha iyi koda izin vermesi gerekiyor. Geriye dönük uyumluluğa sahip olmamak, bazı önemli değişikliklerin noktasıdır.
— Tatarize
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.