Menggunakan Python Timeit untuk Mengatur Waktu Kode Anda

Diterbitkan: 2023-01-17

Dalam tutorial ini, Anda akan belajar cara menggunakan fungsi timeit dari modul timeit Python. Anda akan mempelajari cara mengatur waktu ekspresi dan fungsi sederhana di Python.

Pengaturan waktu kode Anda dapat membantu Anda mendapatkan perkiraan waktu eksekusi sepotong kode dan juga mengidentifikasi bagian kode yang perlu dioptimalkan.

Kita akan mulai dengan mempelajari sintaks fungsi timeit Python. Dan kemudian kita akan membuat kode contoh untuk memahami cara menggunakannya untuk mengatur waktu blok kode dan fungsi dalam modul Python Anda. Mari kita mulai.

Cara Menggunakan Fungsi timeit Python

Modul timeit adalah bagian dari pustaka standar Python, dan Anda dapat mengimpornya:

 import timeit

Sintaks untuk menggunakan fungsi timeit dari modul timeit adalah seperti yang ditunjukkan di bawah ini:

 timeit.timeit(stmt, setup, number)

Di Sini:

  • stmt adalah bagian dari kode yang waktu eksekusinya akan diukur. Anda dapat menentukannya sebagai string Python sederhana atau string multiline, atau meneruskan nama yang dapat dipanggil.
  • Seperti namanya, setup menunjukkan potongan kode yang perlu dijalankan hanya sekali, seringkali sebagai prasyarat untuk menjalankan stmt . Misalnya, Anda menghitung waktu eksekusi untuk pembuatan larik NumPy. Dalam hal ini, mengimpor numpy adalah kode setup dan pembuatan sebenarnya adalah pernyataan yang akan dihitung waktunya.
  • number parameter menunjukkan berapa kali stmt dijalankan. Nilai default number adalah 1 juta (1.000.000), tetapi Anda juga dapat menyetel parameter ini ke nilai lain pilihan Anda.

Sekarang setelah kita mempelajari sintaks untuk menggunakan fungsi timeit() , mari kita mulai membuat kode beberapa contoh.

Mengatur Waktu Ekspresi Python Sederhana

Pengaturan Waktu-Sederhana-Python-Ekspresi

Pada bagian ini, kita akan mencoba mengukur waktu eksekusi ekspresi Python sederhana menggunakan timeit.

Mulai REPL Python dan jalankan contoh kode berikut. Di sini, kami menghitung waktu eksekusi eksponensial dan operasi pembagian lantai untuk 10.000 dan 100.000 operasi.

Perhatikan bahwa kita meneruskan pernyataan untuk diatur waktunya sebagai string Python dan menggunakan titik koma untuk memisahkan berbagai ekspresi dalam pernyataan.

 >>> import timeit >>> timeit.timeit('3**4;3//4',number=10000) 0.0004020999999738706 >>> timeit.timeit('3**4;3//4',number=100000) 0.0013780000000451764

Menjalankan waktu Python di Command Line

Anda juga dapat menggunakan timeit di baris perintah. Berikut adalah baris perintah yang setara dengan pemanggilan fungsi timeit:

 $ python-m timeit -n [number] -s [setup] [stmt]
  • python -m timeit menunjukkan bahwa kita menjalankan timeit sebagai modul utama.
  • n adalah opsi baris perintah yang menunjukkan berapa kali kode harus dijalankan. Ini setara dengan argumen number dalam pemanggilan fungsi timeit() .
  • Anda dapat menggunakan opsi -s untuk menentukan kode penyiapan.

Di sini, kami menulis ulang contoh sebelumnya menggunakan persamaan baris perintah:

 $ python -m timeit -n 100000 '3**4;3//4' 100000 loops, best of 5: 35.8 nsec per loop

Dalam contoh ini, kami menghitung waktu eksekusi fungsi len() bawaan. Inisialisasi string adalah kode penyiapan yang diteruskan menggunakan opsi s .

 $ python -m timeit -n 100000 -s "string_1 = 'coding'" 'len(string_1)' 100000 loops, best of 5: 239 nsec per loop

Pada output, perhatikan bahwa kita mendapatkan waktu eksekusi untuk 5 proses terbaik . Apa artinya ini? Saat Anda menjalankan timeit pada baris perintah, opsi repeat r diatur ke nilai default 5. Ini berarti eksekusi stmt untuk number waktu yang ditentukan diulang lima kali, dan waktu eksekusi terbaik dikembalikan.

Analisis Metode Pembalikan String Menggunakan timeit

Saat bekerja dengan string Python, Anda mungkin ingin membalikkannya. Dua pendekatan paling umum untuk pembalikan string adalah sebagai berikut:

  • Menggunakan pemotongan tali
  • Menggunakan fungsi reversed() dan metode join()
Analisis-of-String-Reversal-Metode-Menggunakan-timeit

Membalikkan String Python Menggunakan Pemotongan String

Mari kita bahas cara kerja pemotongan string, dan bagaimana Anda bisa menggunakannya untuk membalikkan string Python. Menggunakan sintaks some-string[start:stop] mengembalikan potongan string yang dimulai dari start indeks dan memanjang hingga indeks stop-1 . Mari kita ambil contoh.

Pertimbangkan string berikut 'Python'. String dengan panjang 6 dan daftar indeks adalah 0, 1, 2 hingga 5.

gambar-76
 >>> string_1 = 'Python'

Saat Anda menentukan nilai start dan stop , Anda mendapatkan irisan string yang memanjang dari start hingga stop-1 . Oleh karena itu, string_1[1:4] mengembalikan 'yth'.

gambar-77
 >>> string_1 = 'Python' >>> string_1[1:4] 'yth'

Saat Anda tidak menentukan nilai start , nilai start default nol digunakan, dan irisan dimulai pada indeks nol dan memanjang hingga stop - 1 .

gambar-78

Di sini, nilai stop adalah 3, sehingga irisan dimulai dari indeks 0 dan naik ke indeks 2.

 >>> string_1[:3] 'Pyt'

Saat Anda tidak menyertakan indeks stop , Anda melihat bahwa irisan dimulai dari indeks start (1) dan memanjang hingga akhir string.

gambar-80
 >>> string_1[1:] 'ython'

Mengabaikan nilai start dan stop akan mengembalikan potongan dari seluruh string.

gambar-81
 >>> string_1[::] 'Python'

Mari buat irisan dengan nilai step . Tetapkan nilai start , stop , dan step masing-masing ke 1, 5, dan 2. Kami mendapatkan sepotong string mulai dari 1 memanjang hingga 4 (tidak termasuk titik akhir 5) yang berisi setiap karakter kedua .

gambar-82
 >>> string_1[1:5:2] 'yh'

Saat Anda menggunakan langkah negatif, Anda bisa mendapatkan irisan mulai dari akhir string. Dengan langkah diatur ke -2, string_1[5:2:-2] memberikan irisan berikut:

gambar-83
 >>> string_1[5:2:-2] 'nh'

Jadi untuk mendapatkan salinan terbalik dari string, kita stop nilai start dan akhir dan setel langkah ke -1, seperti yang ditunjukkan:

 >>> string_1[::-1] 'nohtyP'

Singkatnya: string[::-1] mengembalikan salinan terbalik dari string.

Membalikkan String Menggunakan Fungsi Built-In dan Metode String

Fungsi built-in reversed() di Python akan mengembalikan iterator terbalik atas elemen string.

 >>> string_1 = 'Python' >>> reversed(string_1) <reversed object at 0x00BEAF70>

Jadi Anda dapat mengulang melalui iterator terbalik menggunakan for loop:

 for char in reversed(string_1): print(char)

Dan akses elemen string dalam urutan terbalik.

 # Output n o h t y P

Selanjutnya, Anda dapat memanggil metode join() pada iterator terbalik dengan sintaks: <sep>.join(reversed(some-string)) .

Cuplikan kode di bawah menunjukkan beberapa contoh di mana pemisah masing-masing adalah tanda hubung dan spasi putih.

 >>> '-'.join(reversed(string1)) 'nohtyP' >>> ' '.join(reversed(string1)) 'nohty P'

Di sini, kami tidak ingin ada pemisah; jadi setel pemisah ke string kosong untuk mendapatkan salinan string yang dibalik:

 >>> ''.join(reversed(string1)) 'nohtyP'

Menggunakan ''.join(reversed(some-string)) mengembalikan salinan terbalik dari string.

Membandingkan Waktu Eksekusi Menggunakan timeit

Sejauh ini, kami telah mempelajari dua pendekatan untuk membalikkan string Python. Tapi siapa di antara mereka yang lebih cepat? Ayo cari tahu.

Dalam contoh sebelumnya di mana kami mengatur waktu ekspresi Python sederhana, kami tidak memiliki kode setup apa pun. Di sini, kami membalikkan string Python. Sementara operasi pembalikan string berjalan untuk beberapa kali yang ditentukan oleh number , kode setup adalah inisialisasi string yang hanya akan berjalan sekali.

 >>> import timeit >>> timeit.timeit(stmt = 'string_1[::-1]', setup = "string_1 = 'Python'", number = 100000) 0.04951830000001678 >>> timeit.timeit(stmt = "''.join(reversed(string_1))", setup = "string_1 = 'Python'", number = 100000) 0.12858760000000302

Untuk jumlah proses yang sama untuk membalikkan string yang diberikan, pendekatan pemotongan string lebih cepat daripada menggunakan metode join() dan fungsi reversed() .

Mengatur Waktu Fungsi Python Menggunakan timeit

Waktu-Python-Fungsi-Menggunakan-timeit

Di bagian ini, mari pelajari cara mengatur waktu fungsi Python dengan fungsi timeit. Diberikan daftar string, fungsi berikut hasDigit mengembalikan daftar string yang memiliki setidaknya satu digit.

 def hasDigit(somelist): str_with_digit = [] for string in somelist: check_char = [char.isdigit() for char in string] if any(check_char): str_with_digit.append(string) return str_with_digit

Sekarang kita ingin mengukur waktu eksekusi fungsi Python hasDigit() ini menggunakan timeit .

Pertama-tama mari kita kenali pernyataan yang akan dihitung waktunya ( stmt ). Ini adalah panggilan ke fungsi hasDigit() dengan daftar string sebagai argumen. Selanjutnya, mari kita tentukan kode penyiapan . Bisakah Anda menebak seperti apa kode setup ?

Agar pemanggilan fungsi berjalan dengan sukses, kode penyiapan harus menyertakan yang berikut ini:

  • Definisi fungsi hasDigit()
  • Inisialisasi daftar argumen string

Mari tentukan kode penyiapan dalam string setup , seperti yang ditunjukkan di bawah ini:

 setup = """ def hasDigit(somelist): str_with_digit = [] for string in somelist: check_char = [char.isdigit() for char in string] if any(check_char): str_with_digit.append(string) return str_with_digit thislist=['puffin3','7frost','blue'] """

Selanjutnya, kita dapat menggunakan fungsi timeit dan mendapatkan waktu eksekusi dari fungsi hasDigit() untuk 100000 run.

 import timeit timeit.timeit('hasDigit(thislist)',setup=setup,number=100000)
 # Output 0.2810094920000097

Kesimpulan

Anda telah mempelajari cara menggunakan fungsi timeit Python untuk mengatur waktu ekspresi, fungsi, dan callable lainnya. Ini dapat membantu Anda membandingkan kode Anda, membandingkan waktu eksekusi implementasi yang berbeda dari fungsi yang sama, dan banyak lagi.

Mari tinjau apa yang telah kita pelajari dalam tutorial ini. Anda dapat menggunakan fungsi timeit() dengan sintaks timeit.timeit(stmt=...,setup=...,number=...) . Alternatifnya, Anda dapat menjalankan timeit di baris perintah untuk mengatur waktu cuplikan kode singkat.

Sebagai langkah selanjutnya, Anda dapat menjelajahi cara menggunakan paket profil Python lainnya seperti line-profiler dan memprofiler untuk membuat profil kode Anda masing-masing untuk waktu dan memori.

Selanjutnya, pelajari cara menghitung selisih waktu dengan Python.