คุณไม่สามารถใช้items
แทนiteritems
ในสถานที่ทั้งหมดใน Python ตัวอย่างเช่นรหัสต่อไปนี้:
class C:
def __init__(self, a):
self.a = a
def __iter__(self):
return self.a.iteritems()
>>> c = C(dict(a=1, b=2, c=3))
>>> [v for v in c]
[('a', 1), ('c', 3), ('b', 2)]
จะแตกถ้าคุณใช้items
:
class D:
def __init__(self, a):
self.a = a
def __iter__(self):
return self.a.items()
>>> d = D(dict(a=1, b=2, c=3))
>>> [v for v in d]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: __iter__ returned non-iterator of type 'list'
สิ่งเดียวกันนี้เป็นจริงสำหรับviewitemsซึ่งมีอยู่ใน Python 3
นอกจากนี้เนื่องจากรายการส่งคืนสำเนารายการ(key, value)
คู่ของพจนานุกรมจึงมีประสิทธิภาพน้อยลงเว้นแต่คุณต้องการสร้างสำเนาอยู่ดี
ใน Python 2 วิธีที่ดีที่สุดคือใช้iteritems
สำหรับการวนซ้ำ 2to3
เครื่องมือที่สามารถแทนที่ด้วยitems
ถ้าคุณเคยตัดสินใจที่จะอัพเกรดไปหลาม 3
iteritems
เป็นตัววนซ้ำซึ่งเป็นเหตุผลว่าทำไมจึงมีประโยชน์ ฉันแทบจะไม่ต้องการย้ำพจนานุกรมเป็นรายการ ดังนั้นวิธีที่ถูกต้องในการย้ำกับพจนานุกรมด้วยตัวสร้างสิ่งที่ชอบในวิธีที่เข้ากันได้กับ Python 2 และ 3 คืออะไร?