Tuy nhiên, hầu hết các cuộc nói chuyện là về ai đó làm việc cuối chỉ kết thúc lên thảo luận rằng họ nên tối ưu hóa các bộ phận khác của mã đầu tiên và nó sẽ không vấn đề trừ khi bạn làm hàng triệu người nếu khác. Bất cứ ai có thể giải thích lý do tại sao điều này là?
Nói chung, bạn chỉ nên tối ưu hóa mã nếu bạn thực sự cần, tức là hiệu suất của chương trình chậm một cách bất thường.
Nếu trường hợp này xảy ra, bạn nên sử dụng trình lược tả để xác định phần nào thực sự gây ra nhiều sự cố nhất. Đối với Python, mô-đun cProfile là khá tốt cho việc này.
Có ai đó hiểu lớp giữa python và mức thấp thực thi có thể giải thích cách hoạt động này không?
Nếu bạn muốn có ý tưởng về cách mã của bạn thực hiện, hãy xem mô-đun dis.
Một ví dụ nhanh chóng ...
import dis
# Here are the things we might want to do
def do_something_a():
print 'I did a'
def do_something_b():
print 'I did b'
def do_something_c():
print 'I did c'
# Case 1
def f1(x):
if x == 1:
do_something_a()
elif x == 2:
do_something_b()
elif x == 3:
do_something_c()
# Case 2
FUNC_MAP = {1: do_something_a, 2: do_something_b, 3: do_something_c}
def f2(x):
FUNC_MAP[x]()
# Show how the functions execute
print 'Case 1'
dis.dis(f1)
print '\n\nCase 2'
dis.dis(f2)
... mà kết quả đầu ra ...
Case 1
18 0 LOAD_FAST 0 (x)
3 LOAD_CONST 1 (1)
6 COMPARE_OP 2 (==)
9 POP_JUMP_IF_FALSE 22
19 12 LOAD_GLOBAL 0 (do_something_a)
15 CALL_FUNCTION 0
18 POP_TOP
19 JUMP_FORWARD 44 (to 66)
20 >> 22 LOAD_FAST 0 (x)
25 LOAD_CONST 2 (2)
28 COMPARE_OP 2 (==)
31 POP_JUMP_IF_FALSE 44
21 34 LOAD_GLOBAL 1 (do_something_b)
37 CALL_FUNCTION 0
40 POP_TOP
41 JUMP_FORWARD 22 (to 66)
22 >> 44 LOAD_FAST 0 (x)
47 LOAD_CONST 3 (3)
50 COMPARE_OP 2 (==)
53 POP_JUMP_IF_FALSE 66
23 56 LOAD_GLOBAL 2 (do_something_c)
59 CALL_FUNCTION 0
62 POP_TOP
63 JUMP_FORWARD 0 (to 66)
>> 66 LOAD_CONST 0 (None)
69 RETURN_VALUE
Case 2
29 0 LOAD_GLOBAL 0 (FUNC_MAP)
3 LOAD_FAST 0 (x)
6 BINARY_SUBSCR
7 CALL_FUNCTION 0
10 POP_TOP
11 LOAD_CONST 0 (None)
14 RETURN_VALUE
... do đó, nó khá dễ dàng để xem những chức năng phải thực hiện các hướng dẫn nhất.
Vì điều đó thực sự nhanh hơn, đó là điều bạn phải kiểm tra bằng cách lập hồ sơ.
* "Tôi muốn kiểm tra xem đó là số nào" * điều đó có nghĩa là gì ?. Bạn có thể sẽ phải cụ thể hơn với câu hỏi của bạn. Python nếu các câu lệnh có thể chậm, có nhiều cách để tối ưu hóa mã python bằng cách duy trì công việc ở cấp độ C tuy nhiên điều này rất cụ thể và câu hỏi của bạn quá rộng. – jamylak
vì vậy nếu tôi biết nó sẽ là một số 0 đến 100. Tôi muốn kiểm tra nếu nó là 0, sau đó làm điều gì đó, nếu nó là 1 làm cái gì khác. – user1938107
Với quá ít số (0-100), nếu bạn nghĩ rằng bạn cần tối ưu hóa, hãy tạo một bảng để bạn có thể đi thẳng đến câu trả lời. Tuy nhiên, có thực sự bạn đã thử một kịch bản "nếu" hoặc từ điển trước? Đó là ... bạn có lý do vững chắc để tin rằng tối ưu hóa vượt quá một trong số đó là cần thiết không? – mah