Rumah >pembangunan bahagian belakang >Tutorial Python >Berapa banyak kaedah gelung pantas yang anda tahu dalam Python?

Berapa banyak kaedah gelung pantas yang anda tahu dalam Python?

WBOY
WBOYke hadapan
2023-04-13 09:13:061866semak imbas

Hai semua, saya somenzz, hari ini kita akan mengkaji kaedah gelung terpantas dalam Python.

Pelbagai postur

Contohnya ada satu tugasan mudah iaitu menjumlahkan dari 1 hingga 100 juta Kita boleh mencapainya sekurang-kurangnya dalam 7 cara, disenaraikan seperti berikut:

1. gelung while

def while_loop(n=100_000_000):
i = 0
s = 0
while i < n:
s += i
i += 1
return s

2 untuk gelung

def for_loop(n=100_000_000):
s = 0
for i in range(n):
s += i
return s

3.

def sum_range(n=100_000_000):
return sum(range(n))
4.

def sum_generator(n=100_000_000):
return sum(i for i in range(n))
5. jumlah kefahaman senarai (list comprehension)

def sum_list_comp(n=100_000_000):
return sum([i for i in range(n)])
6 🎜>

Hasil yang diperolehi oleh 7 kaedah di atas adalah sama, tetapi masa yang digunakan adalah berbeza Anda boleh meneka kaedah mana yang paling cepat, dan kemudian lihat hasil pelaksanaan kod berikut:

import numpy
def sum_numpy(n=100_000_000):
return numpy.sum(numpy.arange(n, dtype=numpy.int64))

Keputusan pelaksanaan adalah seperti berikut:

import numpy
def sum_numpy_python_range(n=100_000_000):
return numpy.sum(range(n))

import timeit

def main():
l_align = 25
print(f'{"1、while 循环":<{l_align}} {timeit.timeit(while_loop, number=1):.6f}')
print(f"{'2、for 循环':<{l_align}}{timeit.timeit(for_loop, number=1):.6f}")
print(f'{"3、sum range":<{l_align}} {timeit.timeit(sum_range, number=1):.6f}')
print(f'{"4、sum generator":<{l_align}} {timeit.timeit(sum_generator, number=1):.6f}')
print(f'{"5、sum list comprehension":<{l_align}} {timeit.timeit(sum_list_comp, number=1):.6f}')
print(f'{"6、sum numpy":<{l_align}} {timeit.timeit(sum_numpy, number=1):.6f}')
print(f'{"7、sum numpy python range":<{l_align}} {timeit.timeit(sum_numpy_python_range, number=1):.6f}')

if __name__ == '__main__':
main()
Cara yang lebih pantas

sekat daripada sementara

Berapa banyak kaedah gelung pantas yang anda tahu dalam Python?untuk dan sementara pada dasarnya adalah melakukan perkara yang sama, tetapi sementara adalah kod Python tulen, dan untuk panggilan sambungan C untuk menambah dan mengehadkan pembolehubah C. Gelung while mewakili Python, jadi for adalah lebih pantas daripada while.

Jumlah terbina dalam Numpy adalah lebih pantas daripada jumlah Python

Numpy terutamanya ditulis dalam C. Untuk fungsi yang sama, numpy pastinya lebih pantas daripada julat Python cepat.

Penggunaan silang akan menjadi lebih perlahan

Jumlah Numpy digunakan dalam kombinasi dengan julat Python, dan hasilnya adalah yang paling lama, lihat kaedah 7. Adalah lebih baik untuk menggunakan pakej numpy untuk menyelesaikan tugas, seperti kaedah 6.

Penjana lebih pantas daripada pemahaman senarai

Penjana malas dan tidak akan menjana 100 juta nombor sekaligus, manakala pemahaman senarai akan memperuntukkan semua nombor sekaligus dan menduduki memori , cache tidak boleh digunakan dengan berkesan, jadi prestasinya lebih teruk sedikit.

Atas ialah kandungan terperinci Berapa banyak kaedah gelung pantas yang anda tahu dalam Python?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:51cto.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam