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?

bodacydo
sumber

Jawaban:

154

Ya, atau next(gen)di 2.6+.

Ignacio Vazquez-Abrams
sumber
3
Saya tahu ini memalukan mengapa ini tidak berhasil? W1 = params.next()tetapi mendapatkan kesalahanAttributeError: 'generator' object has no attribute 'next'
Charlie Parker
2
@CharlieParker Anda harus menggunakan Python 3!
Akshay Lokur
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.

Christian Oudard
sumber
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
dshri
sumber
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.

Ryukendo Dey
sumber
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.

Niki.py
sumber
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