Python Timeit() พร้อมตัวอย่าง

⚡ สรุปอย่างชาญฉลาด

Python ฟังก์ชัน Timeit() วัดเวลาการทำงานของโค้ดส่วนเล็กๆ โดยการรันหลายๆ ครั้งและส่งคืนค่าเวลาที่น้อยที่สุด ฟังก์ชันนี้รองรับเมธอด timeit, repeat และ default_timer และสามารถใช้งานได้จากสคริปต์หรือบรรทัดคำสั่ง

  • ⏱️ Timeit นิยามว่า: วัดเวลาการประมวลผลของโค้ดส่วนหนึ่ง โดยจะคืนค่าเวลาที่น้อยที่สุดจากการทดลองหลายครั้ง
  • 🧩 พารามิเตอร์: คำสั่ง stmt, setup, timer และ number จะควบคุมว่าอะไรจะทำงานและทำงานบ่อยแค่ไหน
  • 🔁 วิธีการ: ฟังก์ชัน timeit(), repeat() และ default_timer() มีตัวเลือกการตั้งเวลาที่แตกต่างกัน
  • ???? บรรทัดคำสั่ง: เรียกใช้คำสั่ง `python -m timeit` โดยใช้แฟล็กต่างๆ เช่น `-n`, `-r` และ `-s`
  • ทำไมต้องใช้: ปิดใช้งานการจัดการขยะและเลือกตัวจับเวลาที่แม่นยำที่สุดสำหรับระบบปฏิบัติการแต่ละระบบ

Python ไทม์อิท()

ความหมายของ Python เวลา()?

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

วากยสัมพันธ์

timeit.timeit(stmt, setup,timer, number)

พารามิเตอร์

  • สตม: นี่จะใช้โค้ดที่คุณต้องการวัดเวลาดำเนินการ ค่าเริ่มต้นคือ "ผ่าน"
  • การติดตั้ง: ซึ่งจะมีรายละเอียดการตั้งค่าที่ต้องดำเนินการก่อน stmt ค่าเริ่มต้นคือ “pass”
  • เครื่องจับเวลา: สิ่งนี้จะมีค่าตัวจับเวลา, timeit() มีการตั้งค่าเริ่มต้นอยู่แล้ว และเราสามารถเพิกเฉยต่อมันได้
  • จำนวน: stmt จะดำเนินการตามหมายเลขที่ให้ไว้ที่นี่ ค่าเริ่มต้นคือ 1000000

หากต้องการทำงานกับ timeit() เราจำเป็นต้องนำเข้าโมดูล ดังที่แสดงด้านล่าง:

import timeit

ตัวอย่างแรก

นี่คือตัวอย่างง่ายๆ ของฟังก์ชัน timeit()

Code 1 ตัวอย่าง

# testing timeit()
import timeit
print(timeit.timeit('output = 10*5'))

Output:

0.06127880399999999

เราได้เห็นตัวอย่างง่ายๆ ที่ให้เวลาในการดำเนินการของเอาต์พุตคำสั่งโค้ดอย่างง่าย = 10*5 และเวลาที่ใช้ในการดำเนินการคือ 0.06127880399999999

การกำหนดเวลาหลายบรรทัดในโค้ดหลาม

มีสองวิธีในการดำเนินการโค้ดหลายบรรทัดใน timeit.timeit(): โดยคั่นบรรทัดด้วยเครื่องหมายเซมิโคลอน หรือใส่โค้ดเป็นสตริงด้วยเครื่องหมายคำพูดสามตัว

นี่คือตัวอย่างที่แสดงการทำงานของมัน

ตัวอย่างที่ 1: การใช้อัฒภาค

import timeit
print("The time taken is ",timeit.timeit(stmt='a=10;b=10;sum=a+b'))

Output:

The time taken is  0.137031482

ตัวอย่างที่ 2: การใช้เครื่องหมายคำพูดสามตัว

import timeit
import_module = "import random"
testcode = '''
def test():
    return random.randint(10, 100)
'''
print(timeit.repeat(stmt=testcode, setup=import_module))

Output:

C:\pythontest>python testtimeit.py
The time taken is  0.182619178

เวลา – วิธีการ

นี่คือ 2 วิธีที่สำคัญในเวลา

timeit.default_timer() : สิ่งนี้จะส่งคืนเวลาเริ่มต้นเมื่อดำเนินการ

timeit.repeat (stmt, การตั้งค่า, ตัวจับเวลา, ทำซ้ำ, หมายเลข) : เช่นเดียวกับ timeit() แต่ด้วยการทำซ้ำ timeit() เรียกว่าจำนวนครั้งที่ให้การทำซ้ำ

ตัวอย่างโปรแกรมที่ 1

# testing timeit()
import timeit
import_module = "import random"
testcode = '''
def test():
    return random.randint(10, 100)
'''
print(timeit.timeit(stmt=testcode, setup=import_module))

Output:

0.46715912400000004

2 ตัวอย่าง

default_timer() ตัวอย่าง

# testing timeit()

import timeit
import random

def test():
    return random.randint(10, 100)

starttime = timeit.default_timer()
print("The start time is :",starttime)
test()
print("The time difference is :", timeit.default_timer() - starttime)

Output:

The start time is : 0.220261875
The time difference is : 0.0004737320000000045

ตัวอย่างที่ 3: timeit.repeat()

# testing timeit()
import timeit
import_module = "import random"
testcode = '''
def test():
    return random.randint(10, 100)
'''
print(timeit.repeat(stmt=testcode, setup=import_module, repeat=5))

Output:

 [0.43638873, 0.5040939680000001, 0.5069179909999999, 0.3943449330000002, 0.3546886979999999]

timeit.repeat() ทำงานคล้ายกับฟังก์ชัน timeit.timeit() โดยมีข้อแตกต่างเพียงอย่างเดียวในอาร์กิวเมนต์การทำซ้ำ และส่งคืนเวลาดำเนินการในรูปแบบอาร์เรย์พร้อมค่าตามหมายเลขการทำซ้ำ

การดำเนินการฟังก์ชันจับเวลา timeit.timeit() ภายในอินเทอร์เฟซบรรทัดคำสั่ง

ไวยากรณ์เพื่อเรียกใช้ฟังก์ชันของคุณภายใน timeit() บนบรรทัดคำสั่งมีดังนี้:

python -m timeit [-n N] [-r N] [-s S] [-t] [-c] [-h] [code statement ...]

พารามิเตอร์บรรทัดคำสั่ง:

  • -n N: จำนวนครั้งที่คุณต้องการให้โค้ดทำงาน
  • -r N: จำนวนครั้งที่คุณต้องการให้ฟังก์ชัน timeit() ทำซ้ำ
  • -s S: นี่จะมีรายละเอียดการตั้งค่าที่จะถูกดำเนินการก่อนการเรียกใช้โค้ด
  • -t: สำหรับสิ่งนี้ คุณสามารถใช้ time.time() ได้
  • -c: สำหรับสิ่งนี้ คุณสามารถใช้ time.clock() ได้
  • -h: เพื่อขอความช่วยเหลือ
  • คำสั่งรหัส: รายละเอียดของรหัส

ตัวอย่าง

C:\pythontest>python -m timeit -s 'text="hello world"'
20000000 loops, best of 5: 13.1 nsec per loop

อีกวิธีหนึ่งที่คุณสามารถดำเนินการภายในบรรทัดคำสั่งได้ดังแสดงด้านล่าง:

ตัวอย่าง

>>> import timeit
>>> print("The time taken is ",timeit.timeit(stmt='a=10;b=10;sum=a+b'))
The time taken is  0.15048536300000137
>>>

เหตุใด timeit() จึงเป็นวิธีที่ดีที่สุดในการวัดเวลาดำเนินการของ Python รหัส?

ต่อไปนี้เป็นเหตุผลบางประการที่เราพิจารณาว่า timeit() เป็นวิธีที่ดีที่สุดในการวัดเวลาดำเนินการ

  • โดยจะรันคำสั่งโค้ด 1 ล้านครั้งซึ่งเป็นค่าเริ่มต้น และจากนั้นจะส่งคืนเวลาขั้นต่ำที่ใช้ไปให้กับคุณ คุณสามารถเพิ่ม/ลด 1 ล้านได้ด้วยการตั้งค่าหมายเลขอาร์กิวเมนต์ในฟังก์ชันเวลา ()
  • ในขณะที่ดำเนินการทดสอบ ฟังก์ชันการรวบรวมขยะจะถูกปิดใช้งานทุกครั้งตามเวลา ()
  • timeit() ภายในจะจับเวลาที่แม่นยำตามระบบปฏิบัติการที่คุณใช้ ตัวอย่างเช่น จะใช้ time.clock() Windows ระบบปฏิบัติการและ time.time() สำหรับ Mac และ Linux

คำถามที่พบบ่อย

เมธอด `timeit.timeit()` จะรันคำสั่งตามจำนวนครั้งที่กำหนดและส่งคืนค่าเวลารวมเพียงครั้งเดียว ส่วนเมธอด `timeit.repeat()` จะรันการวัดทั้งหมดซ้ำหลายครั้งและส่งคืนรายการผลลัพธ์เพื่อให้คุณเลือกผลลัพธ์ที่ดีที่สุด

timeit จะปิดใช้งานการเก็บขยะ (garbage collection) ในระหว่างการวัดผล เพื่อไม่ให้การล้างข้อมูลในพื้นหลังไปรบกวนเวลา ทำให้ผลลัพธ์มีความสม่ำเสมอและเปรียบเทียบได้มากขึ้น โดยมุ่งเน้นเฉพาะเวลาการทำงานของโค้ดที่กำลังทดสอบเท่านั้น

คุณสามารถแยกคำสั่งด้วยเครื่องหมายเซมิโคลอนภายในสตริง stmt หรือส่งสตริงหลายบรรทัดโดยใช้เครื่องหมายอัญประกาศสามตัว สำหรับฟังก์ชัน ให้กำหนดฟังก์ชันเหล่านั้นใน setup และเรียกใช้จาก stmt

AI สามารถวิเคราะห์ประสิทธิภาพโค้ด ระบุลูปที่ทำงานช้าหรือการเรียกใช้ฟังก์ชันที่ใช้ทรัพยากรมาก แนะนำทางเลือกอื่นที่เป็นแบบเวกเตอร์หรือแบบสำเร็จรูป และแนะนำโครงสร้างข้อมูลที่ดีกว่าได้ping นักพัฒนาจะเน้นการปรับปรุงประสิทธิภาพในจุดที่เวลาแสดงให้เห็นถึงปัญหาคอขวดที่ใหญ่ที่สุด

ใช่แล้ว เมื่อได้รับโค้ดตัวอย่างและผลลัพธ์จาก Timeit แล้ว AI สามารถเสนอแนวทางการเขียนใหม่ เช่น การใช้ list comprehensions, generator expressions หรือฟังก์ชันจากไลบรารี จากนั้นคุณก็รัน Timeit อีกครั้งเพื่อยืนยันว่าการปรับปรุงนั้นเกิดขึ้นจริง

สรุปโพสต์นี้ด้วย: