วิธีการสร้าง Iterator
พื้นฐานใน Python
ใน Python, iterators เป็นเครื่องมือที่ทรงพลังที่ช่วยให้คุณสามารถเดินทางผ่านการรวบรวมค่าได้โดยไม่จำเป็นต้องทำงานโดยตรงกับโครงสร้างข้อมูลพื้นฐาน ไม่ว่าคุณจะจัดการกับรายการ, เซ็ต, หรือแม้กระทั่งวัตถุที่กำหนดเอง, การเข้าใจวิธีการสร้าง iterator ของคุณเองสามารถเป็นประโยชน์อย่างมาก
ในบล็อกโพสต์นี้ เราจะพูดถึงวิธีการสร้าง iterator พื้นฐานโดยใช้คลาสตัวอย่างที่เรียกว่า Example
, จากนั้นเราจะสำรวจการใช้งานที่ง่ายขึ้นโดยการใช้ generator
Iterator คืออะไร?
Iterator คือวัตถุที่เป็นไปตามโปรโตคอลของ iterator ซึ่งหมายความว่ามันต้องมีสองวิธีที่สำคัญ:
__iter__()
: วิธีนี้จะส่งกลับวัตถุ iterator เอง__next__()
: วิธีนี้จะส่งค่าต่อไปจากการรวบรวม เมื่อไม่มีรายการเพิ่มเติมให้ส่งกลับ มันจะยกStopIteration
ขึ้น
วิธีเหล่านี้ช่วยให้สามารถวนซ้ำผ่านองค์ประกอบในลูปได้
การสร้าง Iterator พื้นฐาน
มาทำความเข้าใจวิธีการสร้าง iterator ทีละขั้นตอนกันเถอะ
ขั้นตอนที่ 1: กำหนดคลาส
เราจะเริ่มต้นโดยการกำหนดคลาสชื่อ Example
คลาสนี้จะรับรายการของค่าและเปิดเผยมันผ่าน iterator
class Example:
def __init__(self, values):
self.values = values
ขั้นตอนที่ 2: สร้างวิธี Iterator
ตอนนี้เราจะนำเสนอวิธี __iter__
และ __next__
ในคลาส Example
class Example:
def __init__(self, values):
self.values = values
def __iter__(self):
self.index = 0 # เริ่มต้นค่า index
return self
def __next__(self):
if self.index < len(self.values):
result = self.values[self.index]
self.index += 1 # เปลี่ยนไปยัง index ถัดไป
return result
else:
raise StopIteration # ไม่มีค่าเพิ่มเติมให้ส่งกลับ
ขั้นตอนที่ 3: ใช้ Iterator
ตอนนี้คุณสามารถสร้างอินสแตนซ์ของ Example
และวนซ้ำผ่านค่าได้ดังนี้:
e = Example([1, 2, 3])
for value in e:
print("วัตถุตัวอย่างมีค่า", value)
โค้ดนี้จะให้ผลลัพธ์:
วัตถุตัวอย่างมีค่า 1
วัตถุตัวอย่างมีค่า 2
วัตถุตัวอย่างมีค่า 3
การสร้าง Counter Iterator
เพื่อแสดงให้เห็นถึงแนวคิดนี้เพิ่มเติม มาสร้าง Counter
iterator แบบง่ายที่นับจากหมายเลขต่ำถึงหมายเลขสูง
คลาส Counter
นี่คือวิธีที่คุณสามารถสร้าง Counter
iterator:
class Counter:
def __init__(self, low, high):
self.current = low - 1
self.high = high
def __iter__(self):
return self
def __next__(self):
self.current += 1
if self.current < self.high:
return self.current
raise StopIteration
การใช้ Counter
คุณสามารถใช้คลาส Counter
ได้ดังนี้:
for c in Counter(3, 9):
print(c)
ผลลัพธ์จะคือ:
3
4
5
6
7
8
วิธีอื่น: การใช้ Generators
ในขณะที่คลาส iterator ข้างต้นมีประโยชน์ การดำเนินการ generator สามารถทำได้ง่ายกว่า Generators จะจัดการสถานะและโปรโตคอลการวนซ้ำให้กับคุณโดยอัตโนมัติ
นี่คือวิธีการสร้าง counter เป็น generator:
def counter(low, high):
current = low
while current < high:
yield current
current += 1
for c in counter(3, 9):
print(c)
ผลลัพธ์ยังคงเหมือนเดิม แต่การใช้ generator จะทำให้โค้ดของคุณสะอาดและง่ายต่อการบำรุงรักษา
สรุป
การสร้าง iterators ใน Python ช่วยให้คุณกำหนดพฤติกรรมการวนซ้ำของคุณเองและจัดการวิธีการที่วัตถุเปิดเผยค่า โดยการนำเสนอวิธี __iter__()
และ __next__()
คุณสามารถให้ประสบการณ์การวนซ้ำที่กำหนดเองได้ นอกจากนี้ การใช้ generators จะทำให้กระบวนการนี้ง่ายขึ้น ประหยัดเวลาและลดความซับซ้อน
สำหรับการอ่านเพิ่มเติมเกี่ยวกับหัวข้อนี้ โปรดลองตรวจสอบบทความของ David Mertz ที่เกี่ยวกับ Iterators and Simple Generators
ตอนนี้คุณมีความเข้าใจพื้นฐานเกี่ยวกับวิธีการสร้าง iterators ใน Python แล้ว คุณสามารถเริ่มนำแนวคิดเหล่านี้ไปใช้ในโครงการของคุณเองได้!