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

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


คลาส Timer และฟังก์ชันอำนวยความสะดวกอื่นๆ ในโมดูล timeit ของไลบรารีมาตรฐานของ Python ได้รับการออกแบบมาเพื่อให้มีกลไกในการวัดเวลาที่ใช้โดยโค้ด Python ขนาดเล็กในการดำเนินการ โมดูลมีส่วนต่อประสานบรรทัดคำสั่งและสามารถเรียกใช้ฟังก์ชันจากภายในโปรแกรมได้เช่นกัน

วิธีที่ง่ายที่สุดในการวัดเวลาของการดำเนินการคือการใช้ฟังก์ชันอำนวยความสะดวกดังต่อไปนี้

timeit()

ฟังก์ชันนี้ส่งคืนวัตถุของคลาส Timer ส่วนใหญ่ต้องใช้สองพารามิเตอร์

  • stmt − สตริงที่มีคำสั่ง Python ที่ถูกต้องซึ่งจะมีการวัดเวลาดำเนินการ

  • ตั้งค่า − สตริงที่มีคำสั่ง Python ซึ่งจะถูกดำเนินการเพียงครั้งเดียว เป็นหลักในการเริ่มต้นวัตถุหรือตัวแปรบางอย่าง

สตริงทั้งสองอาจมีหลายคำสั่งคั่นด้วยเครื่องหมายเซมิโคลอน (;) หรือการขึ้นบรรทัดใหม่ และทั้งสองค่าเริ่มต้นจะส่งผ่านคีย์เวิร์ด อาจระบุหมายเลขพารามิเตอร์ทางเลือกอื่นซึ่งหมายถึงจำนวนการดำเนินการของ 'stmt'

ในตัวอย่างต่อไปนี้ เวลาที่ใช้ในการดำเนินการพันครั้ง ระบบจะวัดการเพิ่มตัวเลขในช่วง 0-100

import timeit
setupcode = "s = 0"
function = '''
for x in range(100):
s = s + x
'''
print (timeit.timeit(setup = setupcode, stmt = function, number = 1000))

ในที่นี้สตริงมี for loop ซึ่งเพิ่มตัวเลขภายในช่วง 0-100 สตริงนี้เป็นพารามิเตอร์ stmt นอกจากนี้ การกำหนดค่าเริ่มต้นของตัวแปรยังทำได้โดยสตริง setupcode ฟังก์ชัน timeit() คำนวณเวลาที่ต้องการเป็นวินาที

ผลผลิต

0.03055878530880241

คลาสจับเวลา

ผลลัพธ์เดียวกันสามารถรับได้โดยการสร้างวัตถุ Timer ก่อนแล้วจึงรันเมธอด timeit() กับวัตถุนั้น

ซ้ำ()

คลาส 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 ตัวเลือกบรรทัดคำสั่งต่อไปนี้จะกำหนดการตั้งค่าบรรทัดพารามิเตอร์ต่างๆ และโค้ดที่เรียกใช้ได้ ความถี่ในการทำซ้ำ ฯลฯ

-n N, --number =N ดำเนินการ 'คำสั่ง' กี่ครั้ง
-r N, --repeat =N จับเวลาซ้ำกี่ครั้ง (ค่าเริ่มต้น 3)
-s S, --setup =S คำสั่งที่จะดำเนินการในครั้งแรก (ผ่านค่าเริ่มต้น)
-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