আপনি timeit
মডিউলটি ব্যবহার করে এটি পরিমাপ করবেন না কেন ? এটি আপনার আবেদনের সাথে প্রাসঙ্গিক কিনা তা আপনি দেখতে পারেন।
ঠিক আছে, সুতরাং আমি কেবল নিম্নলিখিতটি চেষ্টা করেছি:
import timeit
statements=["""\
try:
b = 10/a
except ZeroDivisionError:
pass""",
"""\
if a:
b = 10/a""",
"b = 10/a"]
for a in (1,0):
for s in statements:
t = timeit.Timer(stmt=s, setup='a={}'.format(a))
print("a = {}\n{}".format(a,s))
print("%.2f usec/pass\n" % (1000000 * t.timeit(number=100000)/100000))
ফলাফল:
a = 1
try:
b = 10/a
except ZeroDivisionError:
pass
0.25 usec/pass
a = 1
if a:
b = 10/a
0.29 usec/pass
a = 1
b = 10/a
0.22 usec/pass
a = 0
try:
b = 10/a
except ZeroDivisionError:
pass
0.57 usec/pass
a = 0
if a:
b = 10/a
0.04 usec/pass
a = 0
b = 10/a
ZeroDivisionError: int division or modulo by zero
সুতরাং, যেমনটি প্রত্যাশা করা হয়েছে, কোনও ব্যতিক্রম হ্যান্ডলার না থাকা কিছুটা দ্রুত (তবে ব্যতিক্রম ঘটলে আপনার মুখে ফুঁক দেয়), এবং যতক্ষণ শর্তটি পূরণ না হয় ততক্ষণ try/except
স্পষ্টের চেয়ে দ্রুত if
is
তবে এটি সমস্ত মাত্রার একই ক্রমের মধ্যে এবং কোনওভাবেই এটির সম্ভাবনা কম। কেবলমাত্র শর্তটি পূরণ করা হলে if
সংস্করণটি উল্লেখযোগ্যভাবে দ্রুত হয়।