Mempertimbangkan:
>>> lst = iter([1,2,3])
>>> next(lst)
1
>>> next(lst)
2
Jadi, memajukan iterator, seperti yang diharapkan, ditangani dengan memutasi objek yang sama.
Karena itu, saya berharap:
a = iter(list(range(10)))
for i in a:
print(i)
next(a)
untuk melewati setiap elemen kedua: panggilan ke next
harus memajukan iterator sekali, maka panggilan implisit yang dibuat oleh loop harus memajukannya untuk kedua kalinya - dan hasil panggilan kedua ini akan ditugaskan untuk i
.
Tidak. Lingkaran mencetak semua item dalam daftar, tanpa melewatkan apapun.
Pikiran pertama saya adalah bahwa ini mungkin terjadi karena loop memanggil iter
apa yang dilewati, dan ini mungkin memberikan iterator independen - ini bukan masalahnya, seperti yang kita miliki iter(a) is a
.
Jadi, mengapa next
tidak muncul untuk memajukan iterator dalam kasus ini?
i
itu sudah ditetapkan.next(a)
berarti bahwa iterasi berikutnya2
ditugaskani
, kemudian Anda bergeraka
lagi, mencetaki
, dll.StopIteration
excepetio nis dinaikkan ketikanext(a)
dipanggil setelah daftar habis.Apa yang terjadi adalah yang
next(a)
mengembalikan nilai berikutnya dari a, yang dicetak ke konsol karena tidak terpengaruh.Apa yang dapat Anda lakukan adalah memengaruhi variabel dengan nilai ini:
sumber
Saya menemukan jawaban yang ada sedikit membingungkan, karena mereka hanya secara tidak langsung menunjukkan hal membingungkan yang penting dalam contoh kode: keduanya * "print i" dan "next (a)" menyebabkan hasil mereka dicetak.
Karena mereka mencetak elemen bergantian dari urutan asli, dan tidak terduga bahwa pernyataan "selanjutnya (a)" dicetak, tampak seolah-olah pernyataan "cetak saya" mencetak semua nilai.
Dalam terang itu, menjadi lebih jelas bahwa menetapkan hasil "next (a)" ke suatu variabel menghambat pencetakan hasilnya, sehingga hanya nilai-nilai alternatif yang dicetak oleh variabel loop "i". Demikian pula, membuat pernyataan "cetak" mengeluarkan sesuatu yang lebih khas juga melemahkannya.
(Salah satu jawaban yang ada membantah yang lain karena jawaban itu memiliki kode contoh dievaluasi sebagai blok, sehingga penerjemah tidak melaporkan nilai antara untuk "selanjutnya (a)".)
Hal yang menarik dalam menjawab pertanyaan, secara umum, adalah eksplisit tentang apa yang jelas setelah Anda tahu jawabannya. Itu bisa sulit dipahami. Demikian juga mengkritik jawaban setelah Anda memahaminya. Ini menarik...
sumber
Ada yang salah dengan Python / Komputer Anda.
Bekerja seperti yang diharapkan.
Diuji dalam Python 2.7 dan Python 3+. Bekerja dengan baik di keduanya
sumber
Bagi yang masih belum mengerti.
Seperti yang telah dikatakan orang lain,
next
tingkatkan iterator sebesar 1 seperti yang diharapkan. Menetapkan nilai yang dikembalikan ke variabel tidak secara ajaib mengubah perilakunya.sumber
Itu berperilaku seperti yang Anda inginkan jika dipanggil sebagai fungsi:
sumber