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.