میز آزمون timeit: 3 پیادهسازی رو در رو
سه تا روش جمع زدن 100000 عدد صحیح رو با timeit.repeat (کمینه 5 تکرار) میسنجه و بعد کاندیداها رو بر اساس ms/فراخوانی با نسبت و میله رتبهبندی میکنه.
کاربرد
پایان دادن به یه بحث code review با عدد و رقم: نسخهی «پایتونیک» واقعاً کندتره؟
پیشنیازها
Python 3.9+ (bibliothèque standard)
Python
import timeit
setup = "data = list(range(100_000))"
candidats = {
"boucle for": "s = 0\nfor x in data: s += x",
"sum() natif": "s = sum(data)",
"genexp + sum": "s = sum(x for x in data)",
}
mesures = {
nom: min(timeit.repeat(code, setup, number=200, repeat=5)) / 200 * 1e3
for nom, code in candidats.items()
}
reference = min(mesures.values())
print(f"{'implémentation':<15} {'ms/appel':>9} {'ratio':>7}")
print("-" * 38)
for nom, ms in sorted(mesures.items(), key=lambda x: x[1]):
print(f"{nom:<15} {ms:>9.3f} {ms / reference:>6.1f}x "
+ "▇" * round(ms / reference * 3))نتیجه
implémentation ms/appel ratio -------------------------------------- sum() natif 0.412 1.0x ▇▇▇ boucle for 2.087 5.1x ▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇ genexp + sum 3.295 8.0x ▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇
timeitPerformanceBenchmarkProfiling