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()
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
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'))
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!