Peningkatan Kelajuan Pelaksanaan Kod melalui Enkapsulasi Fungsi
Apabila melaksanakan kod Python, diperhatikan bahawa kod yang terkandung dalam fungsi berjalan dengan ketara lebih pantas daripada kod yang sama dilaksanakan di luar fungsi. Untuk menyiasat fenomena ini, mari kita menganalisis coretan kod ringkas:
def main(): for i in xrange(10**8): pass main()
Kod ini berjalan dalam kira-kira 1.8 saat apabila dilaksanakan dalam fungsi main(). Walau bagaimanapun, jika gelung for diletakkan di luar fungsi, masa pelaksanaan meningkat kepada sekitar 4.5 saat:
for i in xrange(10**8): pass
Punca perbezaan prestasi ini terletak pada cara Python menyusun kod. Apabila kod dilaksanakan dalam fungsi, ia disusun ke dalam bentuk yang dikenali sebagai bytecode. Bytecode ialah urutan arahan yang Mesin Maya Python (PVM) laksanakan dengan lebih cekap daripada kod Python asal.
Memeriksa kod bait untuk coretan kod menggunakan modul dis mendedahkan perbezaannya:
Dalam masa a fungsi:
2 0 SETUP_LOOP 20 (to 23) 3 LOAD_GLOBAL 0 (xrange) 6 LOAD_CONST 3 (100000000) 9 CALL_FUNCTION 1 12 GET_ITER >> 13 FOR_ITER 6 (to 22) 16 STORE_FAST 0 (i) 3 19 JUMP_ABSOLUTE 13 >> 22 POP_BLOCK >> 23 LOAD_CONST 0 (None) 26 RETURN_VALUE
Di luar fungsi:
1 0 SETUP_LOOP 20 (to 23) 3 LOAD_NAME 0 (xrange) 6 LOAD_CONST 3 (100000000) 9 CALL_FUNCTION 1 12 GET_ITER >> 13 FOR_ITER 6 (to 22) 16 STORE_NAME 1 (i) 2 19 JUMP_ABSOLUTE 13 >> 22 POP_BLOCK >> 23 LOAD_CONST 2 (None) 26 RETURN_VALUE
Perbezaan penting adalah dalam arahan di baris 16 dan 19. Dalam fungsi, pembolehubah i disimpan menggunakan STORE_FAST, yang dioptimumkan untuk pembolehubah tempatan. Walau bagaimanapun, di luar fungsi, i disimpan menggunakan STORE_NAME, yang lebih intensif dari segi pengiraan kerana ia berkaitan dengan pembolehubah global.
Oleh itu, dengan merangkum kod dalam fungsi, kami mengoptimumkan penyimpanan dan pengambilan semula pembolehubah, menghasilkan dalam masa pelaksanaan yang lebih pantas.
Atas ialah kandungan terperinci Mengapa Enkapsulasi Fungsi Meningkatkan Kelajuan Pelaksanaan Kod Python?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!