Bir nesnenin bir __contains__uygulaması yoksa in, temelde şu şekilde çalışan bir varsayılana geri döner:
def default__contains__(self, element):
for thing in self:
if thing == element:
return True
return False
Ve bir nesnenin bir __iter__uygulaması yoksa for, temelde şu şekilde çalışan bir varsayılana geri döner:
def default__iter__(self):
i = 0
try:
while True:
yield self[i]
i += 1
except IndexError:
pass
Bu varsayılanlar, nesne bir dizi olarak tasarlanmamış olsa bile kullanılır.
Sizin 1 in fve 5 in ftestler için öntanımlı seçenekler kullanıyor inve forgözlenen davranış yol. derhal 1 in fbulur 1, ama __getitem__asla geri gelmez 5, bu yüzden 5 in fsonsuza dek çalışır.
(Aslında, Python'un referans uygulamasında, varsayılan __iter__geri dönüş, dizini C düzeyi bir değişkente saklar Py_ssize_t, bu nedenle yeterince beklerseniz, bu değişken en üst düzeye çıkar ve Python bir OverflowError'ı yükseltir . Bilgisayarlar 32 bit Python derlemesinde olmalıdır. Bilgisayarlar, 64 bit Python'da kimsenin buna çarpması için yeterince uzun süredir mevcut değildir.)