Bộ thử nghiệm không cố gắng sử dụng phần nhập khẩu, timeitvì vậy thật khó để biết ý định đó là gì. Tuy nhiên, đây là một câu trả lời kinh điển nên một ví dụ hoàn chỉnh về timeitdường như theo thứ tự, xây dựng trên câu trả lời của Martijn .
Các tài liệu đểtimeit cung cấp nhiều ví dụ và cờ đáng để kiểm tra. Cách sử dụng cơ bản trên dòng lệnh là:
$ python -mtimeit "all(True for _ in range(1000))"
2000 loops, best of 5: 161 usec per loop
$ python -mtimeit "all([True for _ in range(1000)])"
2000 loops, best of 5: 116 usec per loop
Chạy với -hđể xem tất cả các tùy chọn. Python MOTW có một phần tuyệt vời trên timeitđó cho thấy cách chạy các mô-đun thông qua các chuỗi mã nhập và đa dòng từ dòng lệnh.
Ở dạng kịch bản, tôi thường sử dụng nó như thế này:
import argparse
import copy
import dis
import inspect
import random
import sys
import timeit
def test_slice(L):
    L[:]
def test_copy(L):
    L.copy()
def test_deepcopy(L):
    copy.deepcopy(L)
if __name__ == "__main__":
    parser = argparse.ArgumentParser()
    parser.add_argument("--n", type=int, default=10 ** 5)
    parser.add_argument("--trials", type=int, default=100)
    parser.add_argument("--dis", action="store_true")
    args = parser.parse_args()
    n = args.n
    trials = args.trials
    namespace = dict(L = random.sample(range(n), k=n))
    funcs_to_test = [x for x in locals().values() 
                     if callable(x) and x.__module__ == __name__]
    print(f"{'-' * 30}\nn = {n}, {trials} trials\n{'-' * 30}\n")
    for func in funcs_to_test:
        fname = func.__name__
        fargs = ", ".join(inspect.signature(func).parameters)
        stmt = f"{fname}({fargs})"
        setup = f"from __main__ import {fname}"
        time = timeit.timeit(stmt, setup, number=trials, globals=namespace)
        print(inspect.getsource(globals().get(fname)))
        if args.dis:
            dis.dis(globals().get(fname))
        print(f"time (s) => {time}\n{'-' * 30}\n")
Bạn có thể dễ dàng thả các hàm và đối số bạn cần. Hãy thận trọng khi sử dụng các chức năng không tinh khiết và chăm sóc nhà nước.
Đầu ra mẫu:
$ python benchmark.py --n 10000
------------------------------
n = 10000, 100 trials
------------------------------
def test_slice(L):
    L[:]
time (s) => 0.015502399999999972
------------------------------
def test_copy(L):
    L.copy()
time (s) => 0.01651419999999998
------------------------------
def test_deepcopy(L):
    copy.deepcopy(L)
time (s) => 2.136012
------------------------------
               
              
timeit? Tôi đoán là không. Trong trường hợp đó, có lẽ bạn nên xóa "với thời gian Pythons" khỏi tiêu đề.