Jika suatu objek tidak memiliki __contains__implementasi, inkembali ke default yang pada dasarnya bekerja seperti ini:
def default__contains__(self, element):
for thing in self:
if thing == element:
return True
return False
Dan jika suatu objek tidak memiliki __iter__implementasi, forkembali ke default yang pada dasarnya bekerja seperti ini:
def default__iter__(self):
i = 0
try:
while True:
yield self[i]
i += 1
except IndexError:
pass
Default ini digunakan bahkan jika objek tidak dimaksudkan sebagai urutan.
Tes Anda 1 in fdan 5 in fmenggunakan fallback default untuk indan for, yang mengarah ke perilaku yang diamati. segera 1 in fditemukan 1, tetapi Anda __getitem__tidak pernah kembali 5, jadi 5 in fjalankan selamanya.
(Ya, sebenarnya, pada implementasi referensi Python, __iter__fallback default menyimpan indeks dalam tipe variabel level-C Py_ssize_t, jadi jika Anda menunggu cukup lama, variabel itu akan keluar dan Python memunculkan OverflowError . Jika Anda melihatnya, Anda harus menggunakan Python build 32-bit. Komputer belum ada cukup lama bagi siapa pun untuk menekan itu pada Python 64-bit.)