บทช่วยสอนงูหลาม

Python HOME แนะนำ Python Python เริ่มต้น ไวยากรณ์หลาม ความคิดเห็นหลาม ตัวแปรหลาม ประเภทข้อมูลหลาม ตัวเลขหลาม Python Casting Python Strings Python Booleans ตัวดำเนินการ Python รายการหลาม Python Tuples ชุดหลาม พจนานุกรม Python Python If...Else Python ในขณะที่ลูป Python สำหรับลูป ฟังก์ชั่นหลาม Python Lambda Python Arrays Python คลาส/วัตถุ มรดกหลาม Python Iterators ขอบเขตหลาม โมดูล Python วันที่หลาม คณิตศาสตร์หลาม Python JSON Python RegEx Python PIP Python ลอง...ยกเว้น อินพุตผู้ใช้ Python การจัดรูปแบบสตริงหลาม

การจัดการไฟล์

การจัดการไฟล์ Python Python อ่านไฟล์ Python เขียน/สร้างไฟล์ Python ลบไฟล์

โมดูล Python

กวดวิชา NumPy เกมส์หมีแพนด้า กวดวิชา Scipy

Python Matplotlib

บทนำ Matplotlib Matplotlib เริ่มต้น Matplotlib Pyplot Matplotlib พล็อต เครื่องหมาย Matplotlib Matplotlib Line ป้ายกำกับ Matplotlib Matplotlib Grid แผนย่อย Matplotlib Matplotlib Scatter Matplotlib บาร์ Matplotlib Histograms Matplotlib แผนภูมิวงกลม

การเรียนรู้ของเครื่อง

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

Python MySQL

MySQL เริ่มต้น MySQL สร้างฐานข้อมูล MySQL สร้างตาราง MySQL Insert MySQL Select MySQL Where MySQL สั่งซื้อโดย MySQL Delete MySQL Drop Table MySQL Update MySQL Limit MySQL เข้าร่วม

Python MongoDB

MongoDB เริ่มต้น MongoDB สร้างฐานข้อมูล MongoDB สร้างคอลเล็กชัน MongoDB แทรก MongoDB ค้นหา แบบสอบถาม MongoDB MongoDB Sort MongoDB ลบ MongoDB Drop Collection อัพเดท MongoDB MongoDB Limit

การอ้างอิงหลาม

ภาพรวมของ Python ฟังก์ชันในตัวของ Python Python String Methods Python List Methods วิธีพจนานุกรม Python วิธี Python Tuple Python Set Methods วิธีไฟล์ Python คีย์เวิร์ด Python ข้อยกเว้นของ Python คำศัพท์หลาม

การอ้างอิงโมดูล

โมดูลสุ่ม โมดูลคำขอ โมดูลสถิติ โมดูลคณิตศาสตร์ โมดูล cMath

Python ฮาวทู

ลบรายการที่ซ้ำกัน ย้อนกลับสตริง เพิ่มสองตัวเลข

ตัวอย่าง Python

ตัวอย่าง Python Python Compiler แบบฝึกหัดหลาม แบบทดสอบ Python ใบรับรอง Python

Python Iterators


Python Iterators

ตัววนซ้ำเป็นวัตถุที่มีค่าจำนวนนับได้

ตัววนซ้ำเป็นอ็อบเจ็กต์ที่สามารถวนซ้ำได้ หมายความว่าคุณสามารถข้ามผ่านค่าทั้งหมดได้

ในทางเทคนิคแล้ว ใน Python ตัววนซ้ำเป็นอ็อบเจ็กต์ที่ใช้โปรโตคอลตัววนซ้ำ ซึ่งประกอบด้วยเมธอด__iter__() และ__next__().


Iterator เทียบกับ Iterable

รายการ ทูเพิล พจนานุกรม และเซตเป็นอ็อบเจกต์ที่ทำซ้ำได้ทั้งหมด เป็น คอนเทนเนอร์แบบ 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))

วนซ้ำผ่าน Iterator

นอกจากนี้เรายังสามารถใช้การforวนซ้ำเพื่อวนซ้ำผ่านวัตถุที่วนซ้ำได้:

ตัวอย่าง

วนซ้ำค่าของทูเพิล:

mytuple = ("apple", "banana", "cherry")

for x in mytuple:
  print(x)

ตัวอย่าง

วนซ้ำอักขระของสตริง:

mystr = "banana"

for x in mystr:
  print(x)

ลู ปforสร้างอ็อบเจ็กต์ iterator และรันเมธอด next() สำหรับแต่ละลูป



สร้างตัววนซ้ำ

ในการสร้างอ็อบเจ็กต์/คลาสเป็นตัววนซ้ำ คุณต้องใช้เมธอด __iter__()และ __next__()อ็อบเจ็กต์ของคุณ

ดังที่คุณได้เรียนรู้ในบทPython Classes/Objectsทุกคลาสมีฟังก์ชันที่เรียกว่า __init__()ซึ่งทำให้คุณสามารถเริ่มต้นบางอย่างได้เมื่อมีการสร้างอ็อบเจ็กต์

วิธี การ__iter__()นี้ทำหน้าที่คล้ายกัน คุณสามารถดำเนินการได้ (กำลังเริ่มต้น ฯลฯ) แต่ต้องส่งคืนอ็อบเจ็กต์ iterator เองเสมอ

วิธี__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() เพียงพอ หรือถ้าใช้ใน forลูป

เพื่อป้องกันไม่ให้การวนซ้ำเกิดขึ้นตลอดไป เราสามารถใช้ 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)