Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

ความแตกต่างระหว่าง Python iterable และ iterator


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” เพื่อยุติมัน