Penentu Arah dalam Python

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 mengeluarkan StopIteration 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 fungsi next() 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, manakala it, yang diperoleh menggunakan iter(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 gelung for.

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 gelung for.

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 kunci yield, 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, dan tee.

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 fungsi next().
  • 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.

YouTube Video