iterable สามารถกำหนดได้อย่างหลวม ๆ เป็นวัตถุที่จะสร้างตัววนซ้ำเมื่อส่งผ่านไปยังวิธีการที่สร้างขึ้นภายใน iter() มีเงื่อนไขสองสามข้อ เพื่อให้อ็อบเจ็กต์สามารถ iterable ได้ ออบเจ็กต์ของคลาสจำเป็นต้องกำหนดสองอินสแตนซ์ mehtod:__len__ และ __getitem__ วัตถุที่ตรงตามเงื่อนไขเหล่านี้เมื่อส่งผ่านไปยังเมธอด iter() จะสร้างตัววนซ้ำ
มาทำความเข้าใจตัวอย่างด้านล่างเพื่อทำความเข้าใจการทำซ้ำ -
string = "Tutorialspoint" for char in string: print (char)
ผลลัพธ์
T u t o r i a l s p o i n t
เหนือโค้ดใช้เมธอด __getitem__(index) ซึ่งจะส่งคืนองค์ประกอบที่ตำแหน่งที่ระบุโดยดัชนี
ดังนั้นโค้ดด้านบนของเรา -
- เริ่มต้นด้วยดัชนี 0
- สายเรียกเข้า.__getitem__(ดัชนี)
- IndexError ปรากฏขึ้น? หยุด
- ส่วนการวิ่งของวง
- ดัชนีส่วนเพิ่ม ย้อนกลับไปยังขั้นตอนที่ 2
ตัววนซ้ำ
ตัววนซ้ำถูกกำหนดให้เป็นวัตถุที่นับการโต้ตอบผ่านตัวแปรสถานะ iternal ในกรณีนี้ ตัวแปรจะไม่ถูกตั้งค่าเป็นศูนย์เมื่อการวนซ้ำข้ามรายการสุดท้าย แต่ StopIteration() จะถูกยกขึ้นเพื่อระบุจุดสิ้นสุดของการวนซ้ำ นอกจากนี้ยังหมายความว่ารายการที่ทำซ้ำจะถูกทำซ้ำเพียงครั้งเดียวดังตัวอย่างด้านล่าง -
my_list = ['itemOne', 'TutorialsPoints'] iterators_of_some_list = iter(my_list) for i in iterators_of_some_list: print(i) for j in iterators_of_some_list: # doesn't work print(j) #However for k in my_list: print(k) for l in my_list: # it worked print(l)
ผลลัพธ์
itemOne TutorialsPoints itemOne TutorialsPoints itemOne TutorialsPoints
รหัสด้านบนถือเป็นจริงเพราะเมธอด iter() บนตัววนซ้ำส่งคืนตัวเอง (คือการจำสถานะปัจจุบัน) ด้านบนนี้ เรามีการใช้งานแบบวนซ้ำคล้ายกับ “for” เพื่อยุติมัน