Bagaimana cara mendapatkan satu nilai dalam satu waktu dari fungsi generator dengan Python?


113

Pertanyaan yang sangat mendasar - bagaimana cara mendapatkan satu nilai dari generator dengan Python?

Sejauh ini saya menemukan saya bisa mendapatkannya dengan menulis gen.next(). Saya hanya ingin memastikan ini jalan yang benar?

Jawaban:



66

Dalam Python <= 2.5, gunakan gen.next(). Ini akan bekerja untuk semua versi Python 2.x, tetapi tidak untuk Python 3.x

Dalam Python> = 2.6, gunakan next(gen). Ini adalah fungsi bawaan, dan lebih jelas. Ini juga akan bekerja dengan Python 3.

Keduanya akhirnya memanggil fungsi bernama khusus next(), yang dapat diganti dengan subclassing. Dalam Python 3, bagaimanapun, fungsi ini telah diubah namanya menjadi __next__(), agar konsisten dengan fungsi khusus lainnya.


16

Gunakan (untuk python 3)

next(generator)

Berikut ini contohnya

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

harus mencetak

0
1


2

Untuk mendapatkan nilai yang terkait dengan objek generator di python 3 dan di atasnya, gunakan next(<your generator object>). panggilan berikutnya ke next () menghasilkan nilai objek yang berurutan dalam antrian.


1

Di python 3 Anda tidak punya gen.next(), tapi Anda masih bisa menggunakan next(gen). Agak aneh jika Anda bertanya kepada saya tetapi begitulah adanya.


1
Itu tidak aneh. Python 3 seharusnya memecahkan banyak hal dan hanya memungkinkan kode yang lebih jelas dan lebih baik. Tidak memiliki kompatibilitas ke belakang adalah inti dari beberapa perubahan yang merusak.
Tatarize
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.