Mengapa Pemahaman Senarai Python Jauh Lebih Cepat Daripada Melampirkan Senarai?

DDD
Lepaskan: 2024-11-01 12:54:29
asal
190 orang telah melayarinya

 Why Are Python List Comprehensions So Much Faster Than Appending to Lists?

Mengapa Pemahaman Senarai Python Melebihi Senarai Menambah

Pengaturcara Python selalunya melihat jurang prestasi yang ketara antara pemahaman senarai dan ditambahkan pada senarai. Walaupun pemahaman senarai lazimnya dianggap sebagai kemudahan sintaksis, ia menunjukkan kepantasan yang lebih tinggi yang menjangkau lebih daripada ekspresif semata-mata.

Untuk menggambarkan fenomena ini, pertimbangkan ukuran masa berikut:

>>> import timeit
>>> timeit.timeit(stmt='''
t = []
for i in range(10000):
    t.append(i)''', number=10000)
9.467898777974142

>>> timeit.timeit(stmt='t= [i for i in range(10000)]', number=10000)
4.1138417314859
Salin selepas log masuk

Seperti yang terbukti daripada ukuran, pemahaman senarai adalah hampir 50% lebih cepat daripada menambahkan. Mari kita mendalami sebab asas.

Kesilapan Gula Sintaksis

Pemahaman senarai bukan gula sintaksis semata-mata untuk gelung biasa. Mereka mengelakkan overhed yang dikaitkan dengan mengakses dan menggunakan atribut tambah dalam setiap lelaran. Ini menghapuskan penggantungan dan penyambungan semula bingkai berbilang fungsi, yang sememangnya lebih perlahan daripada membina senarai secara terus.

Perbandingan Kod Byte

Memeriksa kod bait yang dibongkar untuk kedua-dua pendekatan memberi penerangan tentang perbezaan prestasi mereka:

# Appending to a List
  18 LOAD_FAST                0 (l)
  20 LOAD_METHOD              1 (append)
  22 LOAD_FAST                1 (i)
  24 CALL_METHOD              1
  26 POP_TOP

# List Comprehension
              2 BUILD_LIST               0
              8 LOAD_FAST                1 (i)
             10 LIST_APPEND              2
Salin selepas log masuk

Invokasi kaedah tambah dalam fungsi pertama dikenakan overhed tambahan, manakala pemahaman senarai terus memanjangkan senarai yang baru dibuat.

Implikasi Praktikal

Dalam senario di mana prestasi adalah yang terpenting , pemahaman senarai harus menjadi pendekatan yang diutamakan daripada menambahkan senarai. Kelajuan unggul mereka berpunca daripada keupayaan mereka untuk memintas kod bait luar dan fungsi panggilan di atas kepala.

Atas ialah kandungan terperinci Mengapa Pemahaman Senarai Python Jauh Lebih Cepat Daripada Melampirkan Senarai?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!