วิธีการสร้าง Iterator พื้นฐานใน Python

ใน Python, iterators เป็นเครื่องมือที่ทรงพลังที่ช่วยให้คุณสามารถเดินทางผ่านการรวบรวมค่าได้โดยไม่จำเป็นต้องทำงานโดยตรงกับโครงสร้างข้อมูลพื้นฐาน ไม่ว่าคุณจะจัดการกับรายการ, เซ็ต, หรือแม้กระทั่งวัตถุที่กำหนดเอง, การเข้าใจวิธีการสร้าง iterator ของคุณเองสามารถเป็นประโยชน์อย่างมาก

ในบล็อกโพสต์นี้ เราจะพูดถึงวิธีการสร้าง iterator พื้นฐานโดยใช้คลาสตัวอย่างที่เรียกว่า Example, จากนั้นเราจะสำรวจการใช้งานที่ง่ายขึ้นโดยการใช้ generator

Iterator คืออะไร?

Iterator คือวัตถุที่เป็นไปตามโปรโตคอลของ iterator ซึ่งหมายความว่ามันต้องมีสองวิธีที่สำคัญ:

  1. __iter__(): วิธีนี้จะส่งกลับวัตถุ iterator เอง
  2. __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 แล้ว คุณสามารถเริ่มนำแนวคิดเหล่านี้ไปใช้ในโครงการของคุณเองได้!