এটি কিছু দিন আগে আমি যে উত্তর দিয়েছিলাম তার ফলো-আপ প্রশ্ন । সম্পাদনা: মনে হচ্ছে যে প্রশ্নটির ওপি একই প্রশ্ন জিজ্ঞাসা করার জন্য ইতিমধ্যে আমার কাছে পোস্ট করা কোডটি ব্যবহার করেছিল , তবে আমি এ সম্পর্কে অসচেতন ছিলাম। দুঃক্ষিত। প্রদত্ত উত্তরগুলি যদিও আলাদা!
উল্লেখযোগ্যভাবে আমি পর্যবেক্ষণ করেছি যে:
>>> def without_else(param=False):
... if param:
... return 1
... return 0
>>> def with_else(param=False):
... if param:
... return 1
... else:
... return 0
>>> from timeit import Timer as T
>>> T(lambda : without_else()).repeat()
[0.3011460304260254, 0.2866089344024658, 0.2871549129486084]
>>> T(lambda : with_else()).repeat()
[0.27536892890930176, 0.2693932056427002, 0.27011704444885254]
>>> T(lambda : without_else(True)).repeat()
[0.3383951187133789, 0.32756996154785156, 0.3279120922088623]
>>> T(lambda : with_else(True)).repeat()
[0.3305950164794922, 0.32186388969421387, 0.3209099769592285]
... বা অন্য কথায়: থাকার elseif শর্তটি চালু হওয়া বা না হওয়া শর্ত ছাড়াই দ্রুততর হয় ।
আমি ধরে নিলাম যে এটি দুটি দ্বারা উত্পন্ন বিভিন্ন বাইকোডের সাথে সম্পর্কযুক্ত, তবে কেউ কি বিশদভাবে নিশ্চিত / ব্যাখ্যা করতে সক্ষম?
সম্পাদনা: দেখে মনে হচ্ছে যে প্রত্যেকেই আমার সময়গুলি পুনরুত্পাদন করতে সক্ষম নয়, তাই আমি ভেবেছিলাম এটি আমার সিস্টেমে কিছু তথ্য দেওয়ার জন্য দরকারী be আমি উবুন্টু ১১.১০ 64৪ বিটটি ডিফল্ট পাইথন ইনস্টল করে চালাচ্ছি। pythonনিম্নলিখিত সংস্করণ তথ্য উত্পন্ন:
Python 2.7.2+ (default, Oct 4 2011, 20:06:09)
[GCC 4.6.1] on linux2
পাইথন ২.7-এ বিচ্ছিন্ন হওয়ার ফলাফল এখানে রয়েছে:
>>> dis.dis(without_else)
2 0 LOAD_FAST 0 (param)
3 POP_JUMP_IF_FALSE 10
3 6 LOAD_CONST 1 (1)
9 RETURN_VALUE
4 >> 10 LOAD_CONST 2 (0)
13 RETURN_VALUE
>>> dis.dis(with_else)
2 0 LOAD_FAST 0 (param)
3 POP_JUMP_IF_FALSE 10
3 6 LOAD_CONST 1 (1)
9 RETURN_VALUE
5 >> 10 LOAD_CONST 2 (0)
13 RETURN_VALUE
14 LOAD_CONST 0 (None)
17 RETURN_VALUE
LOAD_CONST(None); RETURN_VALUE- শেষে কিন্তু বিবৃত, এটা পৌঁছে আগে কখনো ছিল না) with_else। আমি অত্যন্ত সন্দেহ করি ডেড কোড একটি ফাংশনটি দ্রুত করে তোলে। কেউ কি dis2.7 এ সরবরাহ করতে পারে?
elseএবং Falseতাদের ধীরতম সমস্ত (152ns) ছিল। দ্বিতীয় দ্রুততম (143ns) Trueছাড়াই ছিল elseএবং অন্য দুটি মূলত একই রকম ছিল (137ns এবং 138ns)। আমি ডিফল্ট প্যারামিটার ব্যবহার করি নি এবং এটি %timeitআইপিসনে এটি পরিমাপ করেছি ।
with_elseএটি পর্যবেক্ষণযোগ্য দ্রুত।