Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Python

Đo thời gian thực thi đoạn mã Python nhỏ (timeit)


Lớp Timer và các hàm tiện ích khác trong mô-đun timeit của thư viện chuẩn Python được thiết kế để cung cấp cơ chế đo thời gian thực thi của các đoạn mã Python nhỏ. Mô-đun có giao diện dòng lệnh và các hàm có thể được gọi từ trong chương trình.

Cách dễ nhất để đo thời gian thực thi là sử dụng hàm tiện ích sau:

timeit()

Hàm này trả về đối tượng của lớp Timer. Nó chủ yếu yêu cầu hai tham số.

  • stmt - chuỗi chứa câu lệnh Python hợp lệ mà thời gian thực thi cần được đo.

  • setup - chuỗi chứa câu lệnh Python sẽ được thực thi một lần, chủ yếu để khởi tạo các đối tượng hoặc biến nhất định.

Cả hai chuỗi có thể chứa nhiều câu lệnh được phân tách bằng dấu chấm phẩy (;) hoặc dòng mới, và cả hai mặc định là từ khóa pass. Tham số tùy chọn number có thể được cho là số lần thực thi của stmt.

Trong ví dụ sau, thời gian cần thiết để thực hiện một nghìn lần cộng dồn các số trong phạm vi 0-100 được đo.

import timeit
setupcode = "s = 0"
function = '''
for x in range(100):
    s = s + x
'''
print(timeit.timeit(setup=setupcode, stmt=function, number=1000))

Ở đây một chuỗi chứa vòng lặp for trong đó các số trong phạm vi 0-100 được cộng. Chuỗi này là tham số stmt. Cho phép cộng, việc khởi tạo một biến được thực hiện bằng chuỗi setupcode. Hàm timeit() tính toán thời gian cần thiết tính bằng giây.

Đầu ra

0.03055878530880241

Lớp Timer

Cùng kết quả có thể được đạt được bằng cách trước tạo một đối tượng Timer rồi thực thi phương thức timeit() trên nó.

repeat()

Lớp Timer cũng có phương thức repeat() để gọi timeit() liên tục. Nó trả về danh sách của tất cả các lần gọi.

Một phiên bản hướng đối tượng của mã trên như sau:

import timeit
setupcode = "s = 0"
function = '''
for x in range(100):
    s = s + x
'''
t = timeit.Timer(setup=setupcode, stmt=function)
print(t.timeit(number=1000))
print('calling repeat():', t.repeat(3, 1000))

Đầu ra

0.019971274194651528
calling repeat(): [0.023369810546474253, 0.020518432391765262, 0.02075439436427058]

Giao diện dòng lệnh

Như đã nhắc trước, mô-đun timeit có giao diện dòng lệnh. Mô-đun bản thân được nhập bằng tùy chọn -m trong dòng lệnh để thực thi script Python. Các tùy chọn dòng lệnh sau định nghĩa các tham số như setup và mã thực thi, tần suất lặp lại, v.v.

-n N, --number = Nsố lần thực thi 'statement'
-r N, --repeat = Nsố lần lặp lại timer (mặc định 3)
-s S, --setup = Scâu lệnh được thực thi một lần ban đầu (mặc định pass)
-v, --verbosein kết quả thời gian thô; lặp lại để có độ chính xác chữ số nhiều hơn
-h, --helpin thông điệp sử dụng ngắn và thoát

Dưới đây là tương đương dòng lệnh của mã ví dụ dùng trước:

C:\Users\acer>python -m timeit -s "s = 0" "for x in range(100): s = s + x"
10000 loops, best of 3: 22.4 usec per loop