Để đo thời gian thực hiện chương trình, hãy sử dụng time. clock[] hoặc thời gian. chức năng thời gian []. Tài liệu python nói rằng chức năng này nên được sử dụng cho mục đích đo điểm chuẩn.
ví dụ
import time t0= time.clock[] print["Hello"] t1 = time.clock[] - t0 print["Time elapsed: ", t1 - t0] # CPU seconds elapsed [floating point]
đầu ra
Điều này sẽ cho đầu ra -
Time elapsed: 0.0009403145040156798
Bạn cũng có thể sử dụng mô-đun timeit để nhận phân tích thống kê chính xác về thời gian thực thi của đoạn mã. Nó chạy đoạn mã nhiều lần và sau đó cho bạn biết thời gian chạy ngắn nhất mất bao lâu. Bạn có thể sử dụng nó như sau
TUYÊN BỐ MIỄN TRỪ TRÁCH NHIỆM. Các ý kiến bày tỏ trên trang web này là của riêng tôi và chúng không liên quan đến chủ lao động của tôi, người khác hoặc tổ chức khác dưới bất kỳ hình thức nào. Tất cả thông tin trên trang web này được cung cấp "nguyên trạng" mà không có bảo đảm hoặc bảo hành dưới bất kỳ hình thức nào. Đọc bản khuyến cáo đầy đủ ở đây
Bạn đang tìm cách đo lường hiệu suất của mã/ứng dụng Python của mình?
Ba cách phổ biến để đo hiệu suất của mã Python là
- Sử dụng chức năng
- Sử dụng mô-đun
Time elapsed: 0.0009403145040156798
9 - Sử dụng các mô-đun
Tôi sẽ thảo luận chi tiết hơn về từng cách trong số ba cách dưới đây
Xin lưu ý rằng tất cả mã mẫu được sử dụng trong bài viết này có thể được tìm thấy trên hồ sơ GitHub của tôi tại liên kết sau. mẫu mã/Python
Sử dụng hàm $ python3 -m timeit 'for i in range[10]: print[i]'
0
Hàm
$ python3 -m timeit 'for i in range[10]: print[i]'0 trả về giá trị bộ đếm hiệu suất có thể được sử dụng để đo thời gian thực thi mã Python. Ví dụ: để đo thời gian thực hiện của một vòng lặp
$ python3 -m timeit 'for i in range[10]: print[i]'1 đơn giản, người ta có thể sử dụng mã tương tự như sau
start_time = time.perf_counter[] for i in range[10]: print[i] end_time = time.perf_counter[] execution_time = end_time - start_time print[f"The execution time is: {execution_time}"]
Xin lưu ý rằng giá trị được trả về bởi
$ python3 -m timeit 'for i in range[10]: print[i]'0 không có điểm tham chiếu. Do đó, người ta phải luôn tính toán sự khác biệt giữa hai điểm khi đo thời gian thực hiện
Sử dụng mô-đun Time elapsed: 0.0009403145040156798
9
Mô-đun
Time elapsed: 0.00094031450401567989 cung cấp một cách đơn giản để đo thời gian thực thi mã Python. Là một mô-đun,
Time elapsed: 0.00094031450401567989 cung cấp có cả giao diện dòng lệnh cũng như chức năng có thể gọi được có thể được sử dụng trong mã. Tôi đã bao gồm các ví dụ của mỗi bên dưới, sử dụng cùng một vòng lặp
$ python3 -m timeit 'for i in range[10]: print[i]'1 đơn giản như trong ví dụ trước
Giao diện dòng lệnh
Người ta có thể thực hiện lệnh sau để sử dụng giao diện dòng lệnh
Time elapsed: 0.00094031450401567989
$ python3 -m timeit 'for i in range[10]: print[i]'
chức năng có thể gọi
Để sử dụng chức năng có thể gọi được của
Time elapsed: 0.00094031450401567989, người ta có thể sử dụng mã tương tự như sau
def test_fn[]: for i in range[10]: print[i] timeit.timeit[lambda: test_fn[], number=10000]
Xin lưu ý rằng chức năng có thể gọi được của ________ 29 không có số lần lặp lại mặc định. Số lần lặp lại phải được cung cấp khi gọi hàm
Sử dụng mô-đun $ python3 -m timeit 'for i in range[10]: print[i]'
8 và $ python3 -m timeit 'for i in range[10]: print[i]'
9
Các mô-đun
$ python3 -m timeit 'for i in range[10]: print[i]'8 và
$ python3 -m timeit 'for i in range[10]: print[i]'9 cung cấp số liệu thống kê chuyên sâu hơn so với
$ python3 -m timeit 'for i in range[10]: print[i]'0 và
Time elapsed: 0.00094031450401567989. Có nhiều cách để sử dụng mô-đun
$ python3 -m timeit 'for i in range[10]: print[i]'8 và
$ python3 -m timeit 'for i in range[10]: print[i]'9. Tuy nhiên, tôi đã chia sẻ một đoạn mã ví dụ bên dưới sử dụng vòng lặp
$ python3 -m timeit 'for i in range[10]: print[i]'1 đơn giản giống như các ví dụ trước
Python là một trong những ngôn ngữ lập trình phổ biến nhất trong số các nhà phát triển. Nó được sử dụng ở mọi nơi, cho dù đó là phát triển web hay học máy
Có nhiều lý do khiến nó trở nên phổ biến, chẳng hạn như hỗ trợ cộng đồng, thư viện tuyệt vời, việc sử dụng rộng rãi trong Machine Learning và Big Data cũng như cú pháp dễ dàng của nó
Mặc dù có nhiều phẩm chất như vậy nhưng trăn có một nhược điểm, đó là tốc độ chậm. Là một ngôn ngữ thông dịch, python chậm hơn các ngôn ngữ lập trình khác. Tuy nhiên, chúng ta có thể khắc phục vấn đề này bằng một số mẹo
Trong bài viết này, tôi sẽ chia sẻ một số thủ thuật python mà chúng ta có thể sử dụng để làm cho mã python của chúng ta chạy nhanh hơn bình thường. Bắt đầu nào
1. Thuật toán & cấu trúc dữ liệu phù hợp
Mỗi cấu trúc dữ liệu có ảnh hưởng đáng kể đến thời gian chạy. Có nhiều cấu trúc dữ liệu tích hợp sẵn như list, tuple, set và dictionary trong python. Hầu hết mọi người sử dụng cấu trúc dữ liệu danh sách trong mọi trường hợp
Trong python, bộ và từ điển có hiệu suất tra cứu O[1] khi chúng sử dụng bảng băm cho điều đó. Bạn có thể sử dụng bộ và từ điển thay vì danh sách trong các trường hợp sau
- Bạn không có mục trùng lặp trong bộ sưu tập
- Bạn cần phải tìm kiếm các mục nhiều lần trong bộ sưu tập
- Bộ sưu tập chứa một số lượng lớn các mặt hàng
Bạn có thể xem độ phức tạp về thời gian của các cấu trúc dữ liệu khác nhau trong python tại đây
Độ phức tạp về thời gian qua Python Wiki
Trang này ghi lại độ phức tạp về thời gian [còn gọi là "Big O" hoặc "Big Oh"] của các hoạt động khác nhau trong CPython hiện tại.
2. Sử dụng các chức năng và thư viện tích hợp
Các hàm tích hợp sẵn của Python là một trong những cách tốt nhất để tăng tốc mã của bạn. Bạn phải sử dụng các hàm python tích hợp bất cứ khi nào cần. Các chức năng tích hợp này đã được thử nghiệm và tối ưu hóa tốt.
Lý do các hàm tích hợp này nhanh là do các hàm tích hợp sẵn của python, chẳng hạn như min, max, all, map, v.v. , được thực hiện bằng ngôn ngữ C
Bạn nên sử dụng các hàm có sẵn này thay vì viết các hàm thủ công sẽ giúp bạn thực thi mã nhanh hơn
Ví dụ
newlist = [] for word in wordlist: newlist.append[word.upper[]]
Một cách tốt hơn để viết mã này là
Time elapsed: 0.00094031450401567980
Ở đây chúng tôi đang sử dụng chức năng bản đồ tích hợp, được viết bằng C. Do đó, nó nhanh hơn nhiều so với sử dụng vòng lặp
3. Sử dụng nhiều bài tập
Nếu bạn muốn gán giá trị cho nhiều biến thì đừng gán từng dòng một. Python có một cách hay và tốt hơn để gán nhiều biến.
Ví dụ
Time elapsed: 0.00094031450401567981
Một cách tốt hơn để gán các biến này là
Time elapsed: 0.00094031450401567982
Việc gán biến này rõ ràng và thanh lịch hơn nhiều so với cách trên
4. Thích hiểu danh sách hơn các vòng lặp
Hiểu danh sách là một cách hay và tốt hơn để tạo danh sách mới dựa trên các thành phần của danh sách hiện có chỉ trong một dòng mã.
Hiểu danh sách được coi là một cách Pythonic hơn để tạo danh sách mới hơn là xác định danh sách trống và thêm phần tử vào danh sách trống đó
Một ưu điểm khác của việc hiểu danh sách là nó nhanh hơn so với việc sử dụng phương thức append để thêm các phần tử vào danh sách python
Ví dụ
Sử dụng phương pháp nối thêm danh sách
Time elapsed: 0.00094031450401567983
Một cách tốt hơn bằng cách sử dụng hiểu danh sách
Time elapsed: 0.00094031450401567984
Mã trông sạch hơn khi sử dụng khả năng hiểu danh sách
5. nhập khẩu thích hợp
Bạn nên tránh nhập các mô-đun và thư viện không cần thiết cho đến khi và trừ khi bạn cần chúng. Bạn có thể chỉ định tên mô-đun thay vì nhập toàn bộ thư viện.
Nhập các thư viện không cần thiết sẽ làm chậm hiệu suất mã của bạn
Ví dụ
Giả sử bạn cần tìm căn bậc hai của một số. thay vì điều này
Time elapsed: 0.00094031450401567985
Dùng cái này
Time elapsed: 0.00094031450401567986
Trong python, chúng ta nối các chuỗi bằng toán tử ‘+’. Nhưng một cách khác để nối các chuỗi trong python là sử dụng phương thức nối.
Phương thức nối là một cách Pythonic hơn để nối các chuỗi và nó cũng nhanh hơn so với nối các chuỗi bằng toán tử '+'
Lý do tại sao phương thức nối [] nhanh hơn là do toán tử '+' tạo một chuỗi mới và sau đó sao chép chuỗi cũ ở mỗi bước, trong khi phương thức nối [] không hoạt động theo cách đó
Ví dụ
Time elapsed: 0.00094031450401567987
Sử dụng phương pháp nối
Time elapsed: 0.00094031450401567988
Đầu ra của cả hai phương pháp sẽ giống nhau. Sự khác biệt duy nhất là phương thức nối [] nhanh hơn toán tử '+'