Penentu Arah dalam Python
Artikel ini menerangkan tentang penentu arah dalam Python.
YouTube Video
Penentu Arah dalam Python
Gambaran Keseluruhan
Dalam Python, penentu arah adalah mekanisme asas untuk memproses elemen dalam koleksi seperti senarai, tuple, dan kamus satu demi satu.
Apakah itu Penentu Arah?
Penentu arah ialah objek yang boleh mengembalikan elemen satu demi satu. Dalam Python, sesuatu objek dianggap sebagai penentu arah jika memenuhi dua syarat berikut:.
- Ia mempunyai kaedah
__iter__()
yang mengembalikan dirinya sendiri. - Ia mempunyai kaedah
__next__()
yang mengembalikan elemen seterusnya. Ia mengeluarkanStopIteration
apabila tiada lagi elemen.
1iterator = iter([1, 2, 3])
2print(next(iterator)) # 1
3print(next(iterator)) # 2
4print(next(iterator)) # 3
5# print(next(iterator)) # StopIteration occurs
- Dalam kod ini, fungsi
iter()
digunakan untuk menukar senarai kepada peniter, dan fungsinext()
digunakan untuk mendapatkan dan memaparkan setiap elemen satu per satu.
Perbezaan dengan Iterable
Iterable ialah objek yang melaksanakan kaedah __iter__()
dan boleh digunakan dalam gelung for
. Senarai dan tuple adalah contoh iterable.
1nums = [10, 20, 30]
2it = iter(nums) # Get an iterator from the iterable
3print(next(it)) # 10
- Kod ini ialah contoh mendapatkan peniter daripada sesuatu yang boleh diulang seperti senarai, dan mendapatkan elemen secara teratur menggunakan
next()
.
Cara untuk menyemak:
1from collections.abc import Iterable, Iterator
2
3nums = [10, 20, 30]
4it = iter(nums)
5
6print(isinstance(nums, Iterable)) # True
7print(isinstance(nums, Iterator)) # False
8print(isinstance(it, Iterator)) # True
- Kod ini mengesahkan bahawa
nums
adalah sesuatu yang boleh diulang tetapi bukan peniter, manakalait
, yang diperoleh menggunakaniter(nums)
, adalah peniter.
Hubungan antara Gelung for dan Penentu Arah
Gelung for
dalam Python berfungsi secara dalaman seperti berikut:.
1nums = [1, 2, 3]
2iterator = iter(nums)
3while True:
4 try:
5 value = next(iterator)
6 print(value)
7 except StopIteration:
8 break
- Seperti yang ditunjukkan, gelung
for
secara tidak langsung menggunakan penentu arah untuk melakukan iterasi.
Mewujudkan Penentu Arah Tersuai
Anda boleh mencipta penentu arah tersuai menggunakan kelas.
1class Countdown:
2 def __init__(self, start):
3 self.current = start
4
5 def __iter__(self):
6 return self
7
8 def __next__(self):
9 if self.current <= 0:
10 raise StopIteration
11 value = self.current
12 self.current -= 1
13 return value
14
15for num in Countdown(3):
16 print(num) # 3, 2, 1
- Kod ini mentakrifkan peniter khusus yang mengira turun menggunakan kelas
Countdown
dan mencetak nombor dari 3 hingga 1 menggunakan gelungfor
.
Perbezaan antara Penentu Arah dan Penjana, dan Bilakah Menggunakannya
Penjana menyediakan fungsi yang serupa dengan penentu arah. Ia membolehkan anda mentakrif penentu arah dengan lebih ringkas.
1def countdown(n):
2 while n > 0:
3 yield n
4 n -= 1
5
6for i in countdown(3):
7 print(i) # 3, 2, 1
- Kod ini mentakrifkan fungsi penjana yang mengira turun menggunakan
yield
, dan mencetak nombor dari 3 hingga 1 menggunakan gelungfor
.
Perbezaan antara Penentu Arah (Kelas) dan Penjana (Fungsi)
Terdapat perbezaan berikut di antara peniter (kelas) dan penjana (fungsi):.
Ciri | Penentu Arah (kelas) | Penjana (fungsi) |
---|---|---|
Definisi | __iter__() + __next__() |
Fungsi menggunakan yield |
Pengurusan Keadaan | Pengendalian atribut secara manual diperlukan | Mengurus keadaan secara automatik |
Keterbacaan | Boleh menjadi rumit | Mudah dan jelas |
-
Perbezaan dalam Cara Ia Ditakrifkan Penentu arah ditakrifkan dengan menulis dua kaedah secara manual:
__iter__()
dan__next__()
. Sebaliknya, penjana hanyalah fungsi yang menggunakan kata kunciyield
, menjadikan kod lebih ringkas. -
Perbezaan dalam Pengurusan Keadaan Dengan penentu arah, anda mesti mengurus keadaan semasa dan kemajuan secara manual menggunakan pembolehubah. Penjana, bagaimanapun, mengekalkan keadaannya secara automatik dalam Python, mengurangkan usaha manual.
-
Keterbacaan Kod Penentu arah cenderung menjadi rumit kerana ia memerlukan pelbagai kaedah dan pengurusan keadaan secara manual. Sebaliknya, penjana menggunakan sintaks ringkas, menjadikannya mudah difahami walaupun untuk pemula.
Pustaka Standard untuk Menggunakan Penentu Arah: itertools
itertools
, pustaka standard Python, menyediakan alat yang berkuasa untuk bekerja dengan penentu arah.
1import itertools
2
3for x in itertools.count(10, 2): # 10, 12, 14, ...
4 if x > 20:
5 break
6 print(x)
- Ia juga merangkumi banyak fungsi lain seperti
cycle
,repeat
,chain
,islice
, dantee
.
Kes Penggunaan untuk Penentu Arah
Kes penggunaan bagi peniter termasuk yang berikut:.
- Memproses Baris Fail: Membaca baris satu demi satu dari fail sebagai penentu arah.
- Pemprosesan Cekap Memori: Memproses sejumlah besar data secara bersiri.
- Mewakili Urutan Tidak Terhingga: Gunakan fungsi seperti
itertools.count()
.
Ringkasan
- Penentu arah ialah objek yang boleh mendapatkan nilai seterusnya secara bersiri.
- Anda boleh mencipta penentu arah tersuai dengan mentakrifkan
__iter__()
dan__next__()
. - Ia dikendalikan secara automatik melalui gelung
for
atau fungsinext()
. - Menggunakan penjana atau
itertools
membolehkan pemprosesan yang lebih cekap.
Dengan menggunakan penentu arah, anda boleh memproses sejumlah besar data secara bersiri secara cekap memori, membolehkan pengurusan keadaan yang terkawal dan meningkatkan prestasi program.
Anda boleh mengikuti artikel di atas menggunakan Visual Studio Code di saluran YouTube kami. Sila lihat juga saluran YouTube kami.