


Kaedah gelung Python manakah yang paling pantas?
Seperti yang kita semua tahu, Python bukanlah bahasa yang cekap. Di samping itu, gelung adalah operasi yang sangat memakan masa dalam mana-mana bahasa. Jika mana-mana operasi satu langkah mudah mengambil 1 unit masa, jika operasi ini diulang berpuluh ribu kali, masa akhir yang dibelanjakan juga akan meningkat puluhan ribu kali.
sementara dan untuk ialah dua kata kunci yang biasa digunakan untuk melaksanakan gelung dalam Python sebenarnya terdapat jurang dalam kecekapan operasinya. Contohnya, kod ujian berikut:
import timeit def while_loop(n=100_000_000): i = 0 s = 0 while i < n: s += i i += 1 return s def for_loop(n=100_000_000): s = 0 for i in range(n): s += i return s def main(): print('while looptt', timeit.timeit(while_loop, number=1)) print('for looptt', timeit.timeit(for_loop, number=1)) if __name__ == '__main__': main() # => while loop 4.718853999860585 # => for loop 3.211570399813354
Ini ialah operasi jumlah mudah yang mengira hasil tambah semua nombor asli dari 1 hingga n. Anda boleh melihat bahawa gelung for adalah 1.5 saat lebih cepat daripada gelung while.
Perbezaan utama terletak pada mekanisme berbeza antara keduanya.
Dalam setiap gelung, sambil sebenarnya melakukan dua lagi langkah daripada untuk: menyemak sempadan dan menambah pembolehubah i. Iaitu, setiap kali gelung dilakukan, while akan melakukan semakan sempadan (semasa i < n) dan pengiraan kenaikan (i +=1). Kedua-dua langkah adalah kod Python tulen yang jelas. < n)和自增计算(i +=1)。这两步操作都是显式的纯 Python 代码。
for gelung tidak perlu melakukan operasi semakan sempadan dan kenaikan, dan tidak menambah kod Python eksplisit (kod Python tulen kurang cekap daripada kod C yang mendasari). Apabila bilangan kitaran cukup besar, jurang kecekapan yang ketara muncul.
Anda boleh menambah dua lagi fungsi dan menambah semakan sempadan yang tidak perlu dan pengiraan kenaikan automatik dalam gelung untuk:
import timeit def while_loop(n=100_000_000): i = 0 s = 0 while i < n: s += i i += 1 return s def for_loop(n=100_000_000): s = 0 for i in range(n): s += i return s def for_loop_with_inc(n=100_000_000): s = 0 for i in range(n): s += i i += 1 return s def for_loop_with_test(n=100_000_000): s = 0 for i in range(n): if i < n: pass s += i return s def main(): print('while looptt', timeit.timeit(while_loop, number=1)) print('for looptt', timeit.timeit(for_loop, number=1)) print('for loop with incrementtt', timeit.timeit(for_loop_with_inc, number=1)) print('for loop with testtt', timeit.timeit(for_loop_with_test, number=1)) if __name__ == '__main__': main() # => while loop 4.718853999860585 # => for loop 3.211570399813354 # => for loop with increment4.602369500091299 # => for loop with test 4.18337869993411
Ia boleh dilihat bahawa semakan sempadan yang ditambah dan operasi kenaikan automatik Ia sangat mempengaruhi kecekapan pelaksanaan gelung for.
Seperti yang dinyatakan sebelum ini, penterjemah asas Python dan fungsi terbina dalam dilaksanakan dalam bahasa C. Kecekapan pelaksanaan bahasa C jauh lebih besar daripada Python.
Untuk operasi mencari jumlah jujukan aritmetik di atas, dengan bantuan fungsi jumlah terbina dalam Python, kecekapan pelaksanaan boleh diperoleh yang jauh lebih besar daripada gelung for atau while.
import timeit def while_loop(n=100_000_000): i = 0 s = 0 while i < n: s += i i += 1 return s def for_loop(n=100_000_000): s = 0 for i in range(n): s += i return s def sum_range(n=100_000_000): return sum(range(n)) def main(): print('while looptt', timeit.timeit(while_loop, number=1)) print('for looptt', timeit.timeit(for_loop, number=1)) print('sum rangett', timeit.timeit(sum_range, number=1)) if __name__ == '__main__': main() # => while loop 4.718853999860585 # => for loop 3.211570399813354 # => sum range0.8658821999561042
Seperti yang anda lihat , selepas menggunakan jumlah fungsi terbina dalam untuk menggantikan gelung, kecekapan pelaksanaan kod telah meningkat secara eksponen.
Operasi pengumpulan bagi jumlah fungsi terbina dalam sebenarnya adalah gelung, tetapi ia dilaksanakan dalam bahasa C, manakala operasi jumlah dalam gelung for dilaksanakan oleh kod Python tulen s += i. C>Python.
Perluaskan lagi pemikiran anda. Kita semua telah dewasa mendengar cerita tentang pengiraan Gauss yang bijak tentang jumlah dari 1 hingga 100. Jumlah 1…100 adalah sama dengan (1 + 100) * 50. Kaedah pengiraan ini juga boleh digunakan untuk operasi penjumlahan di atas.
import timeit def while_loop(n=100_000_000): i = 0 s = 0 while i < n: s += i i += 1 return s def for_loop(n=100_000_000): s = 0 for i in range(n): s += i return s def sum_range(n=100_000_000): return sum(range(n)) def math_sum(n=100_000_000): return (n * (n - 1)) // 2 def main(): print('while looptt', timeit.timeit(while_loop, number=1)) print('for looptt', timeit.timeit(for_loop, number=1)) print('sum rangett', timeit.timeit(sum_range, number=1)) print('math sumtt', timeit.timeit(math_sum, number=1)) if __name__ == '__main__': main() # => while loop 4.718853999860585 # => for loop 3.211570399813354 # => sum range0.8658821999561042 # => math sum 2.400018274784088e-06
Masa pelaksanaan akhir jumlah matematik ialah kira-kira 2.4e-6, yang dipendekkan berjuta-juta kali. Idea di sini ialah kerana kecekapan gelung adalah rendah, sekeping kod perlu dilaksanakan ratusan juta kali.
Cuma, jangan gelung dan gunakan formula matematik untuk menjadikan ratusan juta operasi gelung menjadi satu langkah sahaja. Kecekapan secara semula jadi telah dipertingkatkan berbanding sebelum ini.
Kesimpulan akhir (sedikit Riddler):
Cara terpantas untuk melaksanakan gelung - - - bukan untuk menggelung
Untuk Python, ia adalah sebaik mungkin Gunakan binaan -in berfungsi untuk meminimumkan kod Python tulen dalam gelung.
Atas ialah kandungan terperinci Kaedah gelung Python manakah yang paling pantas?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas



Hadidb: Pangkalan data Python yang ringan, tinggi, Hadidb (Hadidb) adalah pangkalan data ringan yang ditulis dalam Python, dengan tahap skalabilitas yang tinggi. Pasang HadIdb menggunakan pemasangan PIP: Pengurusan Pengguna PipInstallHadidB Buat Pengguna: CreateUser () Kaedah untuk membuat pengguna baru. Kaedah pengesahan () mengesahkan identiti pengguna. dariHadidb.OperationImportuserer_Obj = user ("admin", "admin") user_obj.

Anda boleh mempelajari konsep pengaturcaraan asas dan kemahiran Python dalam masa 2 jam. 1. Belajar Pembolehubah dan Jenis Data, 2.

Python digunakan secara meluas dalam bidang pembangunan web, sains data, pembelajaran mesin, automasi dan skrip. 1) Dalam pembangunan web, kerangka Django dan Flask memudahkan proses pembangunan. 2) Dalam bidang sains data dan pembelajaran mesin, numpy, panda, scikit-learn dan perpustakaan tensorflow memberikan sokongan yang kuat. 3) Dari segi automasi dan skrip, Python sesuai untuk tugas -tugas seperti ujian automatik dan pengurusan sistem.

Tidak mustahil untuk melihat kata laluan MongoDB secara langsung melalui Navicat kerana ia disimpan sebagai nilai hash. Cara mendapatkan kata laluan yang hilang: 1. Tetapkan semula kata laluan; 2. Periksa fail konfigurasi (mungkin mengandungi nilai hash); 3. Semak Kod (boleh kata laluan Hardcode).

Sebagai profesional data, anda perlu memproses sejumlah besar data dari pelbagai sumber. Ini boleh menimbulkan cabaran kepada pengurusan data dan analisis. Nasib baik, dua perkhidmatan AWS dapat membantu: AWS Glue dan Amazon Athena.

Panduan Pengoptimuman Prestasi Pangkalan Data MySQL Dalam aplikasi yang berintensifkan sumber, pangkalan data MySQL memainkan peranan penting dan bertanggungjawab untuk menguruskan urus niaga besar-besaran. Walau bagaimanapun, apabila skala aplikasi berkembang, kemunculan prestasi pangkalan data sering menjadi kekangan. Artikel ini akan meneroka satu siri strategi pengoptimuman prestasi MySQL yang berkesan untuk memastikan aplikasi anda tetap cekap dan responsif di bawah beban tinggi. Kami akan menggabungkan kes-kes sebenar untuk menerangkan teknologi utama yang mendalam seperti pengindeksan, pengoptimuman pertanyaan, reka bentuk pangkalan data dan caching. 1. Reka bentuk seni bina pangkalan data dan seni bina pangkalan data yang dioptimumkan adalah asas pengoptimuman prestasi MySQL. Berikut adalah beberapa prinsip teras: Memilih jenis data yang betul dan memilih jenis data terkecil yang memenuhi keperluan bukan sahaja dapat menjimatkan ruang penyimpanan, tetapi juga meningkatkan kelajuan pemprosesan data.

Langkah -langkah untuk memulakan pelayan Redis termasuk: Pasang Redis mengikut sistem operasi. Mulakan perkhidmatan Redis melalui Redis-server (Linux/macOS) atau redis-server.exe (Windows). Gunakan redis-cli ping (linux/macOS) atau redis-cli.exe ping (windows) perintah untuk memeriksa status perkhidmatan. Gunakan klien Redis, seperti redis-cli, python, atau node.js untuk mengakses pelayan.

Untuk membaca giliran dari Redis, anda perlu mendapatkan nama giliran, membaca unsur -unsur menggunakan arahan LPOP, dan memproses barisan kosong. Langkah-langkah khusus adalah seperti berikut: Dapatkan nama giliran: Namakannya dengan awalan "giliran:" seperti "giliran: my-queue". Gunakan arahan LPOP: Keluarkan elemen dari kepala barisan dan kembalikan nilainya, seperti LPOP Queue: My-Queue. Memproses Baris kosong: Jika barisan kosong, LPOP mengembalikan nihil, dan anda boleh menyemak sama ada barisan wujud sebelum membaca elemen.
