Mga Iterator sa Python

Mga Iterator sa Python

Ipapaliwanag ng artikulong ito ang mga iterator sa Python.

YouTube Video

Mga Iterator sa Python

Pangkalahatang-ideya

Sa Python, ang iterator ay isang pangunahing mekanismo para sa pagproseso ng bawat elemento ng mga koleksyon tulad ng list, tuple, at dictionary isa-isa.

Ano ang Iterator?

Ang iterator ay isang objeto na makakabigay ng mga elemento isa-isa. Sa Python, itinuturing na iterator ang isang objeto kung natutugunan nito ang dalawang kondisyon:.

  • Mayroon itong __iter__() method na ibinabalik ang sarili nito.
  • Mayroon itong __next__() method na nagbabalik ng susunod na elemento. Nagbubunga ito ng StopIteration kapag wala nang natitirang elemento.
1iterator = iter([1, 2, 3])
2print(next(iterator))  # 1
3print(next(iterator))  # 2
4print(next(iterator))  # 3
5# print(next(iterator))  # StopIteration occurs
  • Sa code na ito, ginagamit ang iter() function upang gawing iterator ang isang listahan, at ang next() function ay ginagamit upang isa-isang kunin at ipakita ang bawat elemento.

Pagkakaiba sa Iterable

Ang iterable ay isang objeto na may __iter__() method at maaaring gamitin sa for loop. Ang mga list at tuple ay mga halimbawa ng iterable.

1nums = [10, 20, 30]
2it = iter(nums)  # Get an iterator from the iterable
3print(next(it))  # 10
  • Ang code na ito ay halimbawa ng pagkuha ng iterator mula sa isang iterable gaya ng listahan at pagkukuha ng mga elemento ayon sa pagkakasunod-sunod gamit ang next().

Paano suriin:

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
  • Ang code na ito ay nagpapatunay na ang nums ay isang iterable ngunit hindi isang iterator, samantalang ang it, na nakuha gamit ang iter(nums), ay isang iterator.

Ugnayan ng for loop at Iterator

Ang for loop sa Python ay gumagana sa loob ng ganitong paraan:.

1nums = [1, 2, 3]
2iterator = iter(nums)
3while True:
4    try:
5        value = next(iterator)
6        print(value)
7    except StopIteration:
8        break
  • Gaya ng ipinapakita, ang for loop ay implicit na gumagamit ng iterator upang magsagawa ng pag-ulit.

Paglikha ng Custom na Iterator

Maaaring kang gumawa ng custom na iterator gamit ang isang class.

 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
  • Ang code na ito ay nagde-define ng isang custom iterator na nagbibilang pababa gamit ang Countdown class at nagpi-print ng mga bilang mula 3 hanggang 1 gamit ang isang for loop.

Pagkakaiba ng Iterator at Generator, at Kailan Dapat Gumamit ng Bawat Isa

Nagbibigay ang generator ng kahalintulad na functionality tulad ng iterator. Pinapadali nito ang paglikha ng iterator sa mas maikling paraan.

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
  • Ang code na ito ay nagde-define ng isang generator function na nagbibilang pababa gamit ang yield, at nagpi-print ng mga bilang mula 3 hanggang 1 gamit ang isang for loop.

Pagkakaiba ng Iterator (Class) at Generator (Function)

Mayroong mga sumusunod na pagkakaiba sa pagitan ng iterators (mga klase) at generators (mga function):.

Katangian Iterator (klase) Generator (function)
Depinisyon __iter__() + __next__() Function na gumagamit ng yield
Pamamahala ng Estado Kailangan ng manu-manong paghawak ng attribute Awtomatikong napapanatili ang estado
Kababasahan Maaaring maging kumplikado Simple at malinaw
  • Pagkakaiba sa Paraan ng Pagdeklara Ang iterator ay dineklara sa pamamagitan ng mano-manong pagsusulat ng dalawang method: __iter__() at __next__(). Sa kabilang banda, ang generator ay isang function na gumagamit lamang ng yield keyword, kaya mas simple ang code.

  • Pagkakaiba sa Pamamahala ng Estado Sa iterator, kailangang ikaw mismo ang magmanage ng kasalukuyang estado at progreso gamit ang mga variable. Ang generator naman ay awtomatikong napapanatili ang estado sa loob ng Python, kaya nababawasan ang manual na paghahanda.

  • Pagkabasa ng Code Ang mga iterator ay madalas nagiging kumplikado dahil kailangan ng maraming methods at manu-manong pamamahala ng estado. Sa kabaligtaran, ang mga generator ay gumagamit ng simpleng syntax kaya mas madaling maintindihan kahit ng mga baguhan.

Standard Library para sa Paggamit ng Iterator: itertools

Ang itertools, isang standard na library ng Python, ay nagbibigay ng malalakas na kasangkapan para sa paggamit ng iterator.

1import itertools
2
3for x in itertools.count(10, 2):  # 10, 12, 14, ...
4    if x > 20:
5        break
6    print(x)
  • Kasama rin dito ang iba pang function tulad ng cycle, repeat, chain, islice, at tee.

Mga Halimbawa ng Paggamit ng Iterator

Ang mga halimbawa ng paggamit para sa iterators ay kinabibilangan ng mga sumusunod:.

  • Pagproseso ng mga Linya ng File: Basahin ang bawat linya mula sa file gamit ang iterator.
  • Memory-Efficient na Pagproseso: Iproseso ang malaking dami ng data ng sunud-sunod.
  • Pagsasaad ng Walang-hanggang Sequence: Gamitin ang mga function gaya ng itertools.count().

Buod

  • Ang iterator ay isang objeto na makakakuha ng susunod na halaga ng sunud-sunod.
  • Puwede kang gumawa ng custom na iterator sa pamamagitan ng pagdeklara ng __iter__() at __next__().
  • Awtomatikong nahahandle ang mga ito gamit ang for loop o ang function na next().
  • Mas epektibong pagproseso ang posible gamit ang generator o itertools.

Sa pamamagitan ng paggamit ng iterator, maaari mong iproseso ang malalaking dami ng data ng sunud-sunod sa memory-efficient na paraan, nagpapahintulot ng kontroladong pamamahala ng estado at pinapabuti ang performance ng programa.

Maaari mong sundan ang artikulo sa itaas gamit ang Visual Studio Code sa aming YouTube channel. Paki-check din ang aming YouTube channel.

YouTube Video