Đừng cố gắng để tối ưu hóa trước khi bạn chuẩn.
Với ý nghĩ đó, đúng là tất cả các biểu thức sẽ được đánh giá ngay cả khi cụm từ trung gian bằng 0.
Đơn hàng có thể vẫn còn quan trọng. Biểu thức là evaluated from left to right. Nếu a,b,c,...
là số rất lớn, chúng có thể buộc Python phân bổ nhiều bộ nhớ, làm chậm quá trình tính toán trước khi nói đến j=0
. (Nếu j=0
xuất hiện sớm hơn trong biểu thức, thì sản phẩm sẽ không bao giờ nhận được lớn và không cần phân bổ bộ nhớ bổ sung).
Nếu sau thời gian mã của bạn với timeit hoặc cProfile, bạn cảm thấy đây có thể là tình hình của bạn, sau đó bạn có thể thử trước khi đánh giá c,d,k,j
, và thử nghiệm
if not all (c,d,k,j):
expression = 0
else:
expression = a*b*c*d*....*w
Sau đó, lần này với timeit
hoặc cProfile
cũng . Cách duy nhất để thực sự biết điều này có hữu ích trong tình huống của bạn hay không là chuẩn mực.
In [333]: import timeit
In [334]: timeit.timeit('10**100*10**100*0')
Out[334]: 1.2021231651306152
In [335]: timeit.timeit('0*10**100*10**100')
Out[335]: 0.13552498817443848
Mặc dù PyPy là nhanh hơn nhiều, nó không xuất hiện để tối ưu hóa này một trong hai:
% pypy-c
Python 2.7.3 (d994777be5ab, Oct 12 2013, 14:13:59)
[PyPy 2.2.0-alpha0 with GCC 4.6.1] on linux2
Type "help", "copyright", "credits" or "license" for more information.
And now for something completely different: ``http://twitpic.com/52ae8f''
>>>> import timeit
>>>> timeit.timeit('10**100*10**100*0')
0.020643949508666992
>>>> timeit.timeit('0*10**100*10**100')
0.003732919692993164
Làm thế nào để giải thích thời gian cuối cùng của Baldur? –