परीक्षण सूट आयातित का उपयोग करने का प्रयास नहीं करता है, timeit
इसलिए यह बताना मुश्किल है कि इरादा क्या था। फिर भी, यह एक विहित जवाब है, इसलिए timeit
ऑर्डर में लगता है का एक पूरा उदाहरण , मार्टिज़न के उत्तर पर विस्तृत है ।
के लिये दस्तावेजtimeit
प्रस्ताव कई उदाहरण और झंडे के लायक बाहर की जाँच। कमांड लाइन पर मूल उपयोग है:
$ 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
साथ चलाने के लिए -h
सभी विकल्पों को देखने के लिए। पायथन MOTW का एक बड़ा भाग है timeit
जो दिखाता है कि आयात और मॉड्यूल लाइन कोड कमांड के माध्यम से मॉड्यूल कैसे चलाएं।
स्क्रिप्ट के रूप में, मैं आमतौर पर इसे इस तरह उपयोग करता हूं:
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")
आप बहुत आसानी से उन कार्यों और तर्कों को छोड़ सकते हैं जिनकी आपको आवश्यकता है। अशुद्ध कार्यों का उपयोग करते समय सावधानी बरतें और राज्य का ख्याल रखें।
नमूना उत्पादन:
$ 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
? मुझे नहीं लगता। उस मामले में, आपको शायद शीर्षक से "पायथन समयसीमा के साथ" हटा देना चाहिए।