যদি কোনও অবজেক্টের __contains__বাস্তবায়ন না হয় তবে inডিফল্টর উপর পড়ে যা মূলত এইভাবে কাজ করে:
def default__contains__(self, element):
for thing in self:
if thing == element:
return True
return False
এবং যদি কোনও অবজেক্টের __iter__বাস্তবায়ন না হয় তবে forডিফল্টর উপর পড়ে যা মূলত এইভাবে কাজ করে:
def default__iter__(self):
i = 0
try:
while True:
yield self[i]
i += 1
except IndexError:
pass
এই ডিফল্টগুলি ব্যবহার করা হয় এমনকি যদি বস্তুটি সিকোয়েন্সের উদ্দেশ্যে না হয়।
আপনার 1 in fএবং 5 in fপরীক্ষাগুলি ডিফল্ট ফ্যালব্যাকগুলি ব্যবহার করছে inএবং এর forফলে পর্যবেক্ষণ করা আচরণের দিকে পরিচালিত করবে। তাত্ক্ষণিকভাবে 1 in fসন্ধান 1করে তবে আপনার __getitem__কখনও ফিরে আসে না 5, তাই 5 in fচিরকাল চলে।
(আচ্ছা, আসলে, পাইথনের রেফারেন্স বাস্তবায়নের ক্ষেত্রে, ডিফল্ট __iter__ফ্যালব্যাক সূচকটি সি-লেভেল ভেরিয়েবলের ধরণের Py_ssize_tআকারে সংরক্ষণ করে, তাই আপনি যদি দীর্ঘক্ষণ অপেক্ষা করেন, তবে ভেরিয়েবলটি ম্যাক্স আউট হয়ে যায় এবং পাইথন একটি ওভারফ্লোআরার উত্থাপন করে If আপনি যদি তা দেখে থাকেন তবে আপনি অবশ্যই 32-বিট পাইথন বিল্ডে থাকা উচিত Comp