Tại sao bạn không đo lường nó bằng cách sử dụng ? Bằng cách đó bạn có thể xem liệu nó có liên quan đến ứng dụng của bạn hay không.
OK, vì vậy tôi vừa thử như sau:
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))
Kết quả:
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
Vì vậy, như mong đợi, không có bất kỳ xử lý ngoại lệ là nhanh hơn một chút (nhưng thổi lên trong bạn khi ngoại lệ xảy ra) và try/except
nhanh hơn if
rõ ràng miễn là điều kiện không được đáp ứng.
Nhưng tất cả đều có cùng thứ tự độ lớn và không có vấn đề gì cả. Chỉ khi điều kiện thực sự được đáp ứng, thì phiên bản if
nhanh hơn đáng kể.
Nguồn
2010-03-26 08:54:50
Khi bạn đo nó, bạn đã học được gì? –
Câu hỏi liên quan: http://stackoverflow.com/questions/1835756/ – tzot
Sử dụng thử/trừ nếu cơ hội kiểm soát sẽ ngoại trừ một phần ít hơn và nếu/nếu có nhiều cơ hội hơn. – shadow0359