পরীক্ষামূলক স্যুট আমদানি করা ব্যবহার করার চেষ্টা করে না 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
সমস্ত বিকল্প দেখতে চালাতে । পাইথন এমটডব্লুতে একটি দুর্দান্ত বিভাগ রয়েছে 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
? আমি মনে করি না. সেক্ষেত্রে আপনার সম্ভবত শিরোনাম থেকে "পাইথনস টাইমাইট সহ" সরিয়ে ফেলা উচিত।