อุปกรณ์เลือกเลื่อนของ Python
- หน้าก่อนหน้า Python การสืบทอด
- หน้าต่อไป Python สถานที่ใช้งาน
อุปกรณ์เลือกเลื่อนของ Python
อุปกรณ์เลือกเลื่อนเป็นวัตถุที่มีจำนวนค่าที่สามารถนับได้
อุปกรณ์เลือกเลื่อนเป็นวัตถุที่สามารถวนรอบ นั่นหมายความว่าคุณสามารถวนรอบทุกค่า
ในทางเทคนิค ใน Python อุปกรณ์เลือกเลื่อนเป็นวัตถุที่ปฏิบัติการตามกฎการวนรอบ มันมีวิธี __iter__()
และ __next__()
อุปกรณ์เลือกเลื่อน VS วัตถุที่สามารถวนรอบ (Iterable)
รายการ、เตียม、ฐานข้อมูลและชุดเป็นวัตถุที่สามารถวนรอบได้ นั่นคือวัตถุที่สามารถกลับอุปกรณ์เลือกเลื่อน (Iterator)
ทุกวัตถุเหล่านี้มีวิธีเพื่อใช้เก็บอุปกรณ์เลือกเลื่อน iter()
วิธี:
ตัวอย่าง
กลับค่าอุปกรณ์เลือกเลื่อนจากเตียม และแสดงค่าแต่ละตัว
mytuple = ("apple", "banana", "cherry") myit = iter(mytuple) print(next(myit)) print(next(myit)) print(next(myit))
แม้แต่ซตริงก็เป็นวัตถุที่สามารถวนรอบได้ และสามารถกลับค่าอุปกรณ์เลือกเลื่อน
ตัวอย่าง
ซตริงก็เป็นวัตถุที่สามารถวนรอบได้ และมีรายการตัวอักษรเป็นรายการตัวอักษร
mystr = "banana" myit = iter(mystr) print(next(myit)) print(next(myit)) print(next(myit)) print(next(myit)) print(next(myit)) print(next(myit))
วนรอบอุปกรณ์เลือกเลื่อน
เราก็สามารถใช้วนรอบ for บวกเพื่อวนรอบสิ่งที่สามารถวนรอบได้
ตัวอย่าง
วนรอบอิเล็กทอร์ ตามค่าในเตียม
mytuple = ("apple", "banana", "cherry") for x in mytuple: print(x)
ตัวอย่าง
วนรอบอิเล็กทอร์ (iterator) ตามตัวอักษรในซตริง
mystr = "banana" for x in mystr: print(x)
คำเตือน:for วนรอบจริงๆ สร้างอุปกรณ์เลือกเลื่อนวัตถุและทำการปฏิบัติการสำหรับวนรอบแต่ละตัว next()
มีวิธีที่ชื่อ
สร้างอุปกรณ์เลือกเลื่อน
เพื่อที่จะสร้างวัตถุ/คลาสเป็นอุปกรณ์เลือกเลื่อน (iterator) ต้องทำการปฏิบัติการสร้างอุปกรณ์เลือกเลื่อน __iter__()
และ __next__()
มีวิธีที่ชื่อ
เหมือนที่คุณได้เรียนรู้ในบทวิชา Python คลาส/วัตถุ __init__()
ฟังก์ชันที่อนุญาตให้คุณกระทำการเริ่มต้นบางอย่างขณะที่ทำการสร้างวัตถุ
__iter__()
ฟังก์ชันที่มีความหมายเดียวกัน คุณสามารถทำการต่างๆ (ตั้งค่าเริ่มต้น และอื่น ๆ) แต่จำเป็นต้องคืนค่าตัวเองของอุปกรณ์ต่อไป
__next__()
ฟังก์ชันนี้ยังอนุญาตให้ทำการต่างๆ และจำเป็นต้องคืนค่ารายการต่อไปในลำดับ
ตัวอย่าง
สร้างอุปกรณ์ที่คืนค่าตัวเลข จาก 1 และเพิ่มค่าเพิ่มเติมทุกตัวในลำดับ (คืนค่า 1, 2, 3, 4, 5 และอื่น ๆ)
class MyNumbers: def __iter__(self): self.a = 1 return self def __next__(self): x = self.a self.a += 1 return x myclass = MyNumbers() myiter = iter(myclass) print(next(myiter)) print(next(myiter)) print(next(myiter)) print(next(myiter)) print(next(myiter))
StopIteration
หากคุณมี next()
ในรูปแบบนี้ตัวอย่างจะเลื่อนไปเป็นอย่างไม่มีจำกัด
เพื่อป้องกันการที่จะเลื่อนไปเป็นอย่างไม่มีจำกัด สามารถใช้คำสั่ง StopIteration
คำสั่ง。
ใน __next__()
ในนำฟังก์ชัน,ถ้ารอบ迴圈จบลงตามกำหนด สามารถเพิ่มเงื่อนไขหยุดลงเพื่อของของที่เกิดขึ้นในภายหลัง
ตัวอย่าง
หยุดลงหลังจาก 20 รอบ迴圈:
class MyNumbers: def __iter__(self): self.a = 1 return self def __next__(self): if self.a <= 20: x = self.a self.a += 1 return x else: raise StopIteration myclass = MyNumbers() myiter = iter(myclass) for x in myiter: print(x)
- หน้าก่อนหน้า Python การสืบทอด
- หน้าต่อไป Python สถานที่ใช้งาน