Python
Iterator adalah objek yang dapat diulang. Dalam tutorial ini, Anda akan mempelajari cara kerja iterator dan cara membuat iterator sendiri menggunakan metode __iter__ dan __next__.
Iterator ada di mana-mana dengan Python. Mereka diimplementasikan secara elegan dalam for
loop, pemahaman, generator, dll. tetapi tersembunyi di depan mata.
Iterator dalam Python hanyalah sebuah objek yang dapat diulang. Objek yang akan mengembalikan data, satu elemen pada satu waktu.
Secara teknis, sebuah objek iterator Python Python harus mengimplementasikan dua metode khusus, __iter__()
dan __next__()
, secara kolektif disebut protokol iterator .
Sebuah objek disebut dapat diubah jika kita bisa mendapatkan iterator darinya. Sebagian besar container bawaan dalam Python seperti:list, tuple, string, dll. dapat diubah.
iter()
fungsi (yang pada gilirannya memanggil __iter__()
metode) mengembalikan iterator dari mereka.
Kami menggunakan next()
berfungsi untuk melakukan iterasi secara manual melalui semua item dari iterator. Ketika kita mencapai akhir dan tidak ada lagi data yang dikembalikan, itu akan memunculkan StopIteration
Pengecualian. Berikut ini contohnya.
# define a list
my_list = [4, 7, 0, 3]
# get an iterator using iter()
my_iter = iter(my_list)
# iterate through it using next()
# Output: 4
print(next(my_iter))
# Output: 7
print(next(my_iter))
# next(obj) is same as obj.__next__()
# Output: 0
print(my_iter.__next__())
# Output: 3
print(my_iter.__next__())
# This will raise error, no items left
next(my_iter)
Keluaran
4 7 0 3 Traceback (most recent call last): File "<string>", line 24, in <module> next(my_iter) StopIteration
Cara yang lebih elegan untuk iterasi otomatis adalah dengan menggunakan for loop. Dengan menggunakan ini, kita dapat mengulangi objek apa pun yang dapat mengembalikan iterator, misalnya daftar, string, file, dll.
>>> for element in my_list:
... print(element)
...
4
7
0
3
Seperti yang kita lihat pada contoh di atas, for
loop dapat mengulang secara otomatis melalui daftar.
Sebenarnya for
loop dapat mengulangi semua iterable. Mari kita lihat lebih dekat bagaimana for
loop sebenarnya diimplementasikan dengan Python.
for element in iterable:
# do something with element
Sebenarnya diimplementasikan sebagai.
# create an iterator object from that iterable
iter_obj = iter(iterable)
# infinite loop
while True:
try:
# get the next item
element = next(iter_obj)
# do something with element
except StopIteration:
# if StopIteration is raised, break from loop
break
Jadi secara internal, for
loop membuat objek iterator, iter_obj
dengan menelepon iter()
di iterable.
Ironisnya, for
. ini loop sebenarnya adalah loop while tak terbatas.
Di dalam loop, ia memanggil next()
untuk mendapatkan elemen berikutnya dan mengeksekusi isi for
lingkaran dengan nilai ini. Setelah semua item habis, StopIteration
dinaikkan yang ditangkap secara internal dan loop berakhir. Perhatikan bahwa segala jenis pengecualian lainnya akan lolos.
Membangun iterator dari awal itu mudah dengan Python. Kita hanya perlu mengimplementasikan __iter__()
dan __next__()
metode.
__iter__()
metode mengembalikan objek iterator itu sendiri. Jika diperlukan, beberapa inisialisasi dapat dilakukan.
__next__()
metode harus mengembalikan item berikutnya dalam urutan. Saat mencapai akhir, dan dalam panggilan berikutnya, itu harus menaikkan StopIteration
.
Di sini, kami menunjukkan contoh yang akan memberi kami kekuatan 2 berikutnya di setiap iterasi. Eksponen daya dimulai dari nol hingga nomor yang ditetapkan pengguna.
Jika Anda tidak tahu apa-apa tentang pemrograman berorientasi objek, kunjungi Pemrograman Berorientasi Objek Python.
class PowTwo:
"""Class to implement an iterator
of powers of two"""
def __init__(self, max=0):
self.max = max
def __iter__(self):
self.n = 0
return self
def __next__(self):
if self.n <= self.max:
result = 2 ** self.n
self.n += 1
return result
else:
raise StopIteration
# create an object
numbers = PowTwo(3)
# create an iterable from the object
i = iter(numbers)
# Using next to get to the next iterator element
print(next(i))
print(next(i))
print(next(i))
print(next(i))
print(next(i))
Keluaran
1 2 4 8 Traceback (most recent call last): File "/home/bsoyuj/Desktop/Untitled-1.py", line 32, in <module> print(next(i)) File "<string>", line 18, in __next__ raise StopIteration StopIteration
Kami juga dapat menggunakan for
loop untuk mengulangi kelas iterator kita.
>>> for i in PowTwo(5):
... print(i)
...
1
2
4
8
16
32
Item dalam objek iterator tidak harus habis. Mungkin ada iterator tak terbatas (yang tidak pernah berakhir). Kita harus berhati-hati saat menangani iterator seperti itu.
Berikut adalah contoh sederhana untuk mendemonstrasikan iterator tak terbatas.
Fungsi bawaan iter()
dapat dipanggil dengan dua argumen di mana argumen pertama harus berupa objek (fungsi) yang dapat dipanggil dan yang kedua adalah sentinel. Iterator memanggil fungsi ini hingga nilai yang dikembalikan sama dengan sentinel.
>>> int()
0
>>> inf = iter(int,1)
>>> next(inf)
0
>>> next(inf)
0
Kita dapat melihat bahwa int()
fungsi selalu mengembalikan 0. Jadi meneruskannya sebagai iter(int,1)
akan mengembalikan iterator yang memanggil int()
sampai nilai yang dikembalikan sama dengan 1. Ini tidak pernah terjadi dan kita mendapatkan iterator tak terbatas.
Kita juga dapat membangun iterator tak terbatas kita sendiri. Iterator berikut, secara teoritis, akan mengembalikan semua angka ganjil.
class InfIter:
"""Infinite iterator to return all
odd numbers"""
def __iter__(self):
self.num = 1
return self
def __next__(self):
num = self.num
self.num += 2
return num
Contoh run adalah sebagai berikut.
>>> a = iter(InfIter())
>>> next(a)
1
>>> next(a)
3
>>> next(a)
5
>>> next(a)
7
Dan seterusnya...
Berhati-hatilah untuk menyertakan kondisi penghentian, saat melakukan iterasi pada jenis iterator tak terbatas ini.
Keuntungan menggunakan iterator adalah mereka menghemat sumber daya. Seperti yang ditunjukkan di atas, kita bisa mendapatkan semua bilangan ganjil tanpa menyimpan seluruh sistem bilangan di memori. Kita dapat memiliki item tak terbatas (secara teoritis) dalam memori yang terbatas.
Ada cara yang lebih mudah untuk membuat iterator dengan Python. Untuk mempelajari lebih lanjut, kunjungi:Generator Python menggunakan hasil.
Python
String Python Dalam tutorial ini Anda akan belajar membuat, memformat, memodifikasi, dan menghapus string dengan Python. Selain itu, Anda akan diperkenalkan dengan berbagai operasi dan fungsi string. Video:String Python Apa itu String di Python? String adalah urutan karakter. Karakter hanyalah s
Python strftime() Dalam artikel ini, Anda akan belajar mengonversi objek tanggal, waktu, dan waktu ke string yang setara (dengan bantuan contoh) Video:Tanggal dan Waktu dengan Python strftime() metode mengembalikan string yang mewakili tanggal dan waktu menggunakan objek tanggal, waktu atau datet
Python strptime() Dalam artikel ini, Anda akan belajar membuat objek datetime dari string (dengan bantuan contoh). Video:Tanggal dan Waktu dengan Python strptime() metode membuat objek datetime dari string yang diberikan. Catatan: Anda tidak dapat membuat datetime objek dari setiap string. Strin
Jika Anda melewatkannya:Python 2 adalah secara resmi tidak didukung mulai 1 Januari 2020 . Jika Anda masih menggunakan Python 2.7, tingkatkan sekarang . Jika Anda tidak yakin versi apa yang Anda jalankan, periksa versi Python Anda. Banyak pengelola paket telah bermigrasi ke Python 3. Beberapa mas