ทำไมคุณไม่วัดโดยใช้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
เวอร์ชันนั้นจะเร็วกว่ามาก