Pengoptimuman Prestasi Kod Python dengan Fungsi
Menjalankan kod khusus dalam fungsi dalam Python telah diperhatikan untuk meningkatkan kelajuan pelaksanaannya dengan ketara. Mari kita siasat sebab di sebalik tingkah laku ingin tahu ini.
Pada mulanya, gelung for dikapsulkan dalam fungsi:
def main(): for i in xrange(10**8): pass main()
Kod ini mempamerkan prestasi yang membanggakan, dilengkapkan dalam masa kurang dari 2 saat. Walau bagaimanapun, apabila gelung for dilaksanakan secara bebas, tanpa disertakan dalam fungsi:
for i in xrange(10**8): pass
masa pelaksanaannya melonjak kepada lebih 4 saat. Untuk merungkai misteri di sebalik perbezaan ini, kita mesti menyelidiki kod bait yang dijana oleh penterjemah Python.
Memeriksa kod bait fungsi, kami mendapati pembolehubah i diperuntukkan menggunakan opcode STORE_FAST.
LOAD_FAST 0 (i)
Apabila gelung for dilaksanakan di peringkat atas, pembolehubah i ditetapkan menggunakan opcode STORE_NAME.
STORE_NAME 1 (i)
Yang penting, telah ditetapkan bahawa STORE_FAST ialah operasi yang lebih cekap daripada STORE_NAME. Kecekapan ini berpunca daripada fakta bahawa apabila i ialah pembolehubah tempatan dalam fungsi (menggunakan STORE_FAST), ia disimpan pada bingkai tindanan. Sebaliknya, apabila i ialah pembolehubah global (menggunakan STORE_NAME), ia mesti disimpan dalam kamus pembolehubah global.
Untuk memeriksa kod bait dengan lebih lanjut, anda boleh menggunakan modul dis. Untuk pembongkaran terus fungsi, modul dis boleh digunakan. Walau bagaimanapun, untuk pembongkaran kod yang dilaksanakan di peringkat atas, kompilasi terbina mesti dimanfaatkan.
Dengan memahami operasi kod bait yang mendasari, kami boleh memanfaatkan kuasa fungsi dalam Python untuk mengoptimumkan kelajuan pelaksanaan kod dengan berkesan.
Atas ialah kandungan terperinci Mengapa Kod Pengekapan dalam Fungsi Meningkatkan Prestasi Python?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!