Prestasi Kod Python yang Dipertingkatkan Dalam Fungsi
Soalan ini menyiasat mengapa kod Python dilaksanakan dengan ketara lebih pantas apabila diletakkan dalam fungsi. Dalam kod yang disediakan, gelung berulang melalui julat yang besar dan masa pelaksanaan berbeza secara mendadak bergantung pada sama ada gelung terkandung dalam fungsi.
Punca Perbezaan Prestasi
Perbezaan prestasi timbul daripada kod bait asas yang dijana untuk kod tersebut. Dalam fungsi, bytecode menggunakan arahan STORE_FAST untuk memberikan nilai kepada pembolehubah tempatan. Proses ini dioptimumkan dan biasanya lebih pantas daripada menggunakan arahan STORE_NAME, yang digunakan untuk menetapkan nilai kepada pembolehubah global atau bukan tempatan.
Analisis Bytecode
Bytecode untuk gelung dalam fungsi adalah seperti berikut:
SETUP_LOOP 20 (to 23) LOAD_GLOBAL 0 (xrange) LOAD_CONST 3 (100000000) CALL_FUNCTION 1 GET_ITER FOR_ITER 6 (to 22) STORE_FAST 0 (i) JUMP_ABSOLUTE 13 POP_BLOCK LOAD_CONST 0 (None) RETURN_VALUE
Sebaliknya, bytecode untuk gelung di luar fungsi ialah:
SETUP_LOOP 20 (to 23) LOAD_NAME 0 (xrange) LOAD_CONST 3 (100000000) CALL_FUNCTION 1 GET_ITER FOR_ITER 6 (to 22) STORE_NAME 1 (i) JUMP_ABSOLUTE 13 POP_BLOCK LOAD_CONST 2 (None) RETURN_VALUE
Kesimpulan
Penggunaan STORE_FAST dan bukannya STORE_NAME dalam kod bait yang dijana untuk gelung dalam fungsi menyumbang kepada kelajuan pelaksanaannya yang dipertingkatkan. Ini menunjukkan kepentingan memahami teknik pengoptimuman bytecode untuk meningkatkan prestasi kod Python.
Atas ialah kandungan terperinci Mengapa Kod Python Berjalan Lebih Pantas Fungsi Di Dalam?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!