Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

วัดเวลาการรันของโค้ด Python ขนาดเล็ก (timeit)

คลาส 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