Computer >> Máy Tính >  >> Lập trình >> Python

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

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

Cách dễ nhất để đo thời gian thực hiện là sử dụng hàm tiện lợi 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 - một chuỗi chứa câu lệnh Python hợp lệ có thời gian thực thi sẽ được đo lường.

  • thiết lập - một 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 đều được mặc định để chuyển từ khóa. Một số tham số tùy chọn khác có thể được đưa ra biểu thị số lần thực thi 'stmt'

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

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 một vòng lặp for trong đó các số trong phạm vi 0-100 được thêm vào. Chuỗi này là tham số stmt. Ngoài ra, việc khởi tạo một biến được thực hiện bởi một chuỗi mã thiết lập. Hàm timeit () tính toán thời gian cần thiết theo giây.

Đầu ra

0.03055878530880241

Lớp hẹn giờ

Kết quả tương tự có thể đạt được bằng cách tạo một đối tượng Timer trước tiên và sau đó thực thi phương thức timeit () trên đó.

repeat ()

Lớp Timer cũng có một phương thức repeat () để gọi timeit () nhiều lần. Nó trả về danh sách tất cả các cuộc gọi.

Phiên bản hướng đối tượng của đoạn 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ư đã đề cập trước đó, mô-đun timeit có giao diện dòng lệnh. Bản thân mô-đun được nhập bằng tùy chọn –m trong dòng lệnh để thực thi tập lệnh Python. Các tùy chọn dòng lệnh sau xác định thiết lập dòng tham số khác nhau và mã thực thi, tần suất lặp lại, v.v.

bao nhiêu lần
-n N, --number =N thực thi ‘câu lệnh’
-r N, --repeat =N bao nhiêu lần để lặp lại bộ hẹn giờ (mặc định 3)
-s S, --setup =S câu lệnh sẽ được thực thi một lần ban đầu (pass mặc định)
-v, --verbose in kết quả thời gian thô; lặp lại để có nhiều chữ số chính xác hơn
-h, - trợ giúp in một thông báo sử dụng ngắn và thoát

Sau đây là dòng lệnh tương đương với mã ví dụ được sử 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