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 ngStopIteration
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 angnext()
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 angit
, na nakuha gamit angiter(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 isangfor
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 isangfor
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 ngyield
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
, attee
.
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 nanext()
. - 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.