คลาส Timer และฟังก์ชันสะดวกอื่นๆ ในโมดูล timeit ของไลบรารีมาตรฐาน Python ออกแบบมาเพื่อให้กลไกวัดเวลาที่ใช้โดยชิ้นโค้ด Python ขนาดเล็กในการรัน โมดูลนี้มีอินเทอร์เฟซบรรทัดคำสั่งและฟังก์ชันสามารถเรียกใช้จากภายในโปรแกรมได้เช่นกัน
วิธีง่ายที่สุดในการวัดเวลาการรันคือการใช้ฟังก์ชันสะดวกต่อไปนี้:
timeit()
ฟังก์ชันนี้คืนค่าอ็อบเจ็กต์ของคลาส Timer ต้องการพารามิเตอร์หลัก 2 ตัว:
stmt - สตริงที่มีคำสั่ง Python ที่ถูกต้องซึ่งต้องการวัดเวลาการรัน
setup - สตริงที่มีคำสั่ง Python ซึ่งจะรันครั้งเดียว 主要เพื่อเริ่มต้นอ็อบเจ็กต์หรือตัวแปรบางอย่าง
ทั้งสองสตริงอาจมีหลายคำสั่งคั่นด้วยเครื่องหมายเซมิคอลอน (;) หรือบรรทัดใหม่ และทั้งคู่มีค่าเริ่มต้นเป็นคีย์เวิร์ด pass อีกพารามิเตอร์ตัวเลือก number อาจระบุได้ ซึ่งหมายถึงจำนวนการรันของ 'stmt'
ในตัวอย่างต่อไปนี้ วัดเวลาที่ใช้ในการทำการบวกสะสมของตัวเลขในช่วง 0-100 จำนวน 1000 ครั้ง:
import timeit
setupcode = "s = 0"
function = '''
for x in range(100):
s = s + x
'''
print(timeit.timeit(setup=setupcode, stmt=function, number=1000))
ที่นี่ สตริงมีลูป for ซึ่งในนั้นตัวเลขในช่วง 0-100 ถูกบวกกัน สตริงนี้คือพารามิเตอร์ stmt สำหรับการบวก การเริ่มต้นตัวแปรทำโดยสตริง setupcode ฟังก์ชัน timeit() คำนวณเวลาที่ใช้ในหน่วยวินาที:
ผลลัพธ์
0.03055878530880241
คลาส Timer
ผลลัพธ์เดียวกันสามารถได้โดยการสร้างอ็อบเจ็กต์ Timer ก่อน แล้วจึงรันเมธอด timeit() บนมัน:
repeat()
คลาส Timer ยังมีเมธอด repeat() เพื่อเรียก timeit() ซ้ำๆ มันคืนค่ารายการของทุกการเรียก:
เวอร์ชันเชิงวัตถุของโค้ดข้างต้นคือ:
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))
ผลลัพธ์
0.019971274194651528 calling repeat(): [0.023369810546474253, 0.020518432391765262, 0.02075439436427058]
อินเทอร์เฟซบรรทัดคำสั่ง
ตามที่กล่าวไว้ก่อนหน้า timeit โมดูลมีอินเทอร์เฟซบรรทัดคำสั่ง โมดูลเองถูกนำเข้าโดยใช้ตัวเลือก -m ในบรรทัดคำสั่งสำหรับการรันสคริปต์ Python ตัวเลือกบรรทัดคำสั่งต่อไปนี้กำหนดพารามิเตอร์ต่างๆ เช่น setup และโค้ดที่รันได้ ความถี่ในการทำซ้ำ ฯลฯ:
| -n N, --number = N | จำนวนครั้งที่จะรัน 'statement' |
| -r N, --repeat = N | จำนวนครั้งที่จะทำซ้ำตัวจับเวลา (ค่าเริ่มต้น 3) |
| -s S, --setup = S | คำสั่งที่จะรันครั้งเดียวในตอนแรก (ค่าเริ่มต้น pass) |
| -v, --verbose | พิมพ์ผลเวลาดิบ; ทำซ้ำเพื่อความแม่นยำมากขึ้น |
| -h, --help | พิมพ์ข้อความการใช้งานสั้นและออก |
คำสั่งบรรทัดคำสั่งที่เทียบเท่ากับโค้ดตัวอย่างที่ใช้ก่อนหน้านี้:
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