आप 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
।
लेकिन यह परिमाण के एक ही क्रम के भीतर है और किसी भी तरह से बात करने की संभावना नहीं है। केवल अगर हालत वास्तव में मिले हैं, तो if
संस्करण काफी तेज है।