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

ความแตกต่างระหว่าง Python Iterable และ Iterator


Iterable สามารถนิยามได้แบบ鬆散 ว่าเป็นอ็อบเจกต์ที่จะสร้าง iterator เมื่อส่งผ่าน built-in method iter() มีเงื่อนไขสองสามอย่าง สำหรับอ็อบเจกต์ให้เป็น iterable อ็อบเจกต์ของคลาสต้องกำหนด instance method สองตัว: __len__ และ __getitem__ อ็อบเจกต์ที่เงื่อนไขเหล่านี้เมื่อส่งผ่านเมธอด iter() จะสร้าง iterator

มาเข้าใจตัวอย่างด้านล่าง เพื่อเข้าใจ iterable −

string = "Tutorialspoint" for char in string: print (char)

ผลลัพธ์

T u t o r i a l s p o i n t

ข้างต้นโค้ดใช้เมธอด __getitem__(index) ซึ่งจะคืนค่า element ที่ตำแหน่งที่ระบุโดย index

ดังนั้นโค้ดข้างต้นของเรา −

  • เริ่มต้นที่ index 0
  • เรียก string.__getitem__(index)
  • IndexError ถูกยกขึ้น? หยุด
  • รัน body ของลูป
  • เพิ่ม index, กลับไปขั้นตอนที่ 2

Iterators (ตัววนซ้ำ)

Iterators ถูกนิยามว่าเป็นอ็อบเจกต์ที่นับ iteration ผ่าน internal state variable ตัวแปรในกรณีนี้ ไม่ถูกตั้งค่าเป็นศูนย์เมื่อ iteration ข้ามรายการสุดท้าย แต่ StopIteration() จะถูกยกขึ้นเพื่อบ่งชี้ถึงการสิ้นสุดของ iteration นี่ยังหมายถึงว่า iterated item จะถูก iterate เพียงครั้งเดียวเท่านั้น เช่นในตัวอย่างด้านล่าง −

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() บน iterator คืนค่าตัวมันเอง (คือจำสถานะปัจจุบัน) ดังนั้นข้างต้นเรามีการ implement แบบลูปคล้าย "for" เพื่อยุติมัน