Python Timeit() với các ví dụ

⚡ Tóm tắt thông minh

Python Hàm `timeit()` đo thời gian thực thi của một đoạn mã nhỏ bằng cách chạy đoạn mã đó nhiều lần và trả về thời gian ngắn nhất. Nó hỗ trợ các phương thức `timeit`, `repeat` và `default_timer` và hoạt động từ các tập lệnh hoặc dòng lệnh.

  • 🇧🇷 Định nghĩa về Timeit: Đo thời gian thực thi của một đoạn mã, trả về giá trị nhỏ nhất sau nhiều lần chạy.
  • 🧩 Tham số: Các lệnh stmt, setup, timer và number điều khiển những gì chạy và tần suất chạy.
  • 🔁 Phương pháp: Các hàm timeit(), repeat() và default_timer() cung cấp các tùy chọn định thời khác nhau.
  • 💻 Dòng lệnh: Chạy lệnh `python -m timeit` với các cờ như `-n`, `-r` và `-s`.
  • Tại sao nên sử dụng: Vô hiệu hóa quá trình thu gom rác và chọn bộ hẹn giờ chính xác nhất cho từng hệ điều hành.

Python Timeit()

Là gì Python Thời gian()?

Python timeit () là một phương pháp trong Python thư viện để đo thời gian thực thi của đoạn mã đã cho. các Python thư viện chạy câu lệnh mã 1 triệu lần và cung cấp thời gian tối thiểu lấy từ tập hợp các đoạn mã nhất định. Python timeit() là một phương pháp hữu ích giúp kiểm tra hiệu suất của mã.

cú pháp

timeit.timeit(stmt, setup,timer, number)

Thông số Kỹ thuật

  • stmt: Thao tác này sẽ lấy mã mà bạn muốn đo thời gian thực thi. Giá trị mặc định là “vượt qua”.
  • thiết lập: Điều này sẽ có các chi tiết thiết lập cần được thực hiện trước khi stmt. Giá trị mặc định là “pass”.
  • bộ đếm thời gian: Cái này sẽ có giá trị bộ đếm thời gian, timeit() đã được đặt giá trị mặc định và chúng ta có thể bỏ qua nó.
  • con số: Stmt sẽ thực thi theo số được đưa ra ở đây. Giá trị mặc định là 1000000.

Để làm việc với timeit(), chúng ta cần nhập mô-đun, như hiển thị bên dưới:

import timeit

Ví dụ đầu tiên

Đây là một ví dụ đơn giản về hàm timeit()

Code Ví dụ 1

# testing timeit()
import timeit
print(timeit.timeit('output = 10*5'))

Đầu ra:

0.06127880399999999

Chúng ta đã thấy một ví dụ đơn giản cung cấp cho chúng ta thời gian thực thi của câu lệnh mã đơn giản đầu ra = 10*5 và thời gian cần thiết để thực thi nó là 0.06127880399999999.

Thời gian Nhiều dòng trong mã python

Có hai cách để thực thi nhiều dòng mã trong timeit.timeit(): phân tách các dòng bằng dấu chấm phẩy hoặc đặt mã dưới dạng chuỗi trong dấu ngoặc kép ba.

Dưới đây là những ví dụ cho thấy hoạt động của nó.

Ví dụ 1: Sử dụng dấu chấm phẩy

import timeit
print("The time taken is ",timeit.timeit(stmt='a=10;b=10;sum=a+b'))

Đầu ra:

The time taken is  0.137031482

Ví dụ 2: Sử dụng dấu ngoặc kép

import timeit
import_module = "import random"
testcode = '''
def test():
    return random.randint(10, 100)
'''
print(timeit.repeat(stmt=testcode, setup=import_module))

Đầu ra:

C:\pythontest>python testtimeit.py
The time taken is  0.182619178

thời gian - Phương pháp

Dưới đây là 2 phương pháp timeit quan trọng

timeit.default_timer() : Điều này sẽ trả về thời gian mặc định khi được thực thi.

timeit.repeat (stmt, thiết lập, hẹn giờ, lặp lại, số) : giống như timeit() , nhưng với lặp lại timeit() được gọi là số lần lặp lại được đưa ra.

Chương trình ví dụ 1

# testing timeit()
import timeit
import_module = "import random"
testcode = '''
def test():
    return random.randint(10, 100)
'''
print(timeit.timeit(stmt=testcode, setup=import_module))

Đầu ra:

0.46715912400000004

Ví dụ 2

default_timer() Ví dụ

# testing timeit()

import timeit
import random

def test():
    return random.randint(10, 100)

starttime = timeit.default_timer()
print("The start time is :",starttime)
test()
print("The time difference is :", timeit.default_timer() - starttime)

Đầu ra:

The start time is : 0.220261875
The time difference is : 0.0004737320000000045

Ví dụ 3: timeit.repeat()

# testing timeit()
import timeit
import_module = "import random"
testcode = '''
def test():
    return random.randint(10, 100)
'''
print(timeit.repeat(stmt=testcode, setup=import_module, repeat=5))

Đầu ra:

 [0.43638873, 0.5040939680000001, 0.5069179909999999, 0.3943449330000002, 0.3546886979999999]

timeit.repeat() hoạt động tương tự như hàm timeit.timeit(), với điểm khác biệt duy nhất là nó có đối số lặp lại và trả về thời gian thực hiện ở định dạng mảng với các giá trị theo số lặp lại.

Thực thi hàm tính thời gian timeit.timeit() bên trong giao diện dòng lệnh

Cú pháp để thực thi hàm của bạn bên trong timeit() trên dòng lệnh như sau:

python -m timeit [-n N] [-r N] [-s S] [-t] [-c] [-h] [code statement ...]

Tham số dòng lệnh:

  • -n N: số lần bạn muốn code thực thi.
  • -r N: số lần bạn muốn hàm timeit() lặp lại
  • -s S: phần này sẽ thiết lập các chi tiết sẽ được thực thi trước khi thực thi mã.
  • -t: đối với điều này, bạn có thể sử dụng time.time()
  • -c: để làm điều này, bạn có thể sử dụng time.clock()
  • -h: để được giúp đỡ
  • câu lệnh mã: Chi tiết mã.

Ví dụ

C:\pythontest>python -m timeit -s 'text="hello world"'
20000000 loops, best of 5: 13.1 nsec per loop

Một cách khác bạn có thể thực thi bên trong dòng lệnh như dưới đây:

Ví dụ

>>> import timeit
>>> print("The time taken is ",timeit.timeit(stmt='a=10;b=10;sum=a+b'))
The time taken is  0.15048536300000137
>>>

Tại sao timeit() là cách tốt nhất để đo thời gian thực hiện của Python mã số?

Dưới đây là một số lý do khiến chúng tôi coi timeit() là cách tốt nhất để đo thời gian thực hiện.

  • Nó chạy câu lệnh mã 1 triệu lần, đó là giá trị mặc định và từ đó, nó sẽ trả về cho bạn thời gian tối thiểu đã thực hiện. Bạn cũng có thể tăng/giảm 1 triệu bằng cách đặt số đối số trong hàm time().
  • Trong khi thực hiện kiểm tra, việc thu gom rác luôn bị vô hiệu hóa bởi hàm time().
  • timeit() nội bộ sẽ tính thời gian chính xác theo hệ điều hành của bạn đang được sử dụng. Ví dụ: nó sẽ sử dụng time.clock() cho Windows hệ điều hành và time.time() cho mac và Linux.

Câu Hỏi Thường Gặp

Phương thức `timeit.timeit()` thực thi câu lệnh một số lần nhất định và trả về một tổng thời gian duy nhất. Phương thức `timeit.repeat()` thực thi toàn bộ phép đo đó nhiều lần và trả về một danh sách các kết quả, cho phép bạn chọn kết quả tốt nhất.

Timeit vô hiệu hóa quá trình thu gom rác trong khi đo để việc dọn dẹp nền không làm sai lệch thời gian. Điều này giúp kết quả nhất quán và dễ so sánh hơn, tập trung hoàn toàn vào thời gian thực thi của đoạn mã đang được kiểm tra.

Bạn có thể phân tách các câu lệnh bằng dấu chấm phẩy bên trong chuỗi stmt, hoặc truyền một chuỗi nhiều dòng bằng cách sử dụng dấu ngoặc kép ba lần. Đối với các hàm, hãy định nghĩa chúng trong setup và gọi chúng từ stmt.

Trí tuệ nhân tạo (AI) có thể phân tích mã, xác định các vòng lặp chậm hoặc các lệnh gọi tốn kém, đề xuất các giải pháp thay thế dựa trên vector hoặc tích hợp sẵn, và đề xuất các cấu trúc dữ liệu tốt hơn, giúp ích.ping Các nhà phát triển tập trung tối ưu hóa ở những nơi mà TimeIt cho thấy có nhiều điểm nghẽn nhất.

Đúng vậy. Với một đoạn mã và kết quả timeit của nó, AI có thể đề xuất các cách viết lại như sử dụng list comprehensions, generator expressions hoặc library functions, sau đó bạn chạy lại timeit để xác nhận xem sự cải thiện có thực sự hiệu quả hay không.

Tóm tắt bài viết này với: