Mengapa Kod Python Fungsi Dalam Lebih Cepat?

Susan Sarandon
Lepaskan: 2024-11-12 22:01:01
asal
627 orang telah melayarinya

Why is Python Code Faster Inside Functions?

Kod Python yang Lebih Pantas dalam Fungsi: Mendedahkan Pelaksanaan Dioptimumkan

Apabila melaksanakan kod Python, melampirkan operasi dalam fungsi selalunya membawa kepada peningkatan prestasi yang ketara. Perbezaan ketara ini mencetuskan rasa ingin tahu:为何 Python 代码在函数中执行更快?

Menyiasat Perbezaan Kelajuan

Pertimbangkan kod berikut coretan:

def main():
    for i in xrange(10**8):
        pass
main()
Salin selepas log masuk

Menjalankan kod ini menghasilkan masa lebih kurang 1.8 saat. Walau bagaimanapun, apabila gelung for dilaksanakan di luar fungsi:

for i in xrange(10**8):
    pass
Salin selepas log masuk

Pelaksanaan mengambil masa lebih lama 4.5 saat.

Analisis Bytecode: Mendedahkan Sebab Asas

Untuk memahami percanggahan prestasi ini, kami menyelidiki kod bait yang dijana oleh Python. Di dalam fungsi, kod bait menunjukkan jujukan operasi yang menyediakan gelung, mengira julat dan berulang melaluinya. Struktur ini dioptimumkan untuk kelajuan.

Di peringkat atas, kod bait berbeza sedikit. Pembolehubah i diisytiharkan sebagai global, menghasilkan operasi kedai yang lebih perlahan (STORE_NAME) daripada operasi kedai tempatan (STORE_FAST) yang digunakan dalam fungsi.

Untuk memeriksa bytecode, modul dis menyediakan bantuan yang berharga. Arahan berikut membongkar fungsi dan kod peringkat atas masing-masing:

import dis
dis.dis(main)
dis.dis(compile('for i in xrange(10**8): pass', '', 'exec'))
Salin selepas log masuk

Kesimpulan

Kelebihan prestasi melaksanakan kod dalam fungsi dalam Python berpunca daripada pengoptimuman dalam pelaksanaan bytecode. Penggunaan pembolehubah tempatan, yang diwakili oleh arahan STORE_FAST, meningkatkan kelajuan pelaksanaan dengan ketara berbanding menggunakan pembolehubah global, yang melibatkan arahan STORE_NAME yang lebih perlahan.

Atas ialah kandungan terperinci Mengapa Kod Python Fungsi Dalam Lebih Cepat?. 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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan