Rumah > pembangunan bahagian belakang > Tutorial Python > Mengapa Kod Python Lebih Pantas Apabila Dilaksanakan Di Dalam Fungsi?

Mengapa Kod Python Lebih Pantas Apabila Dilaksanakan Di Dalam Fungsi?

DDD
Lepaskan: 2024-11-15 13:17:03
asal
509 orang telah melayarinya

Why is Python Code Faster When Executed Inside a Function?

Why Does Python Code Execute More Swiftly in Functions?

Consider the Python code snippet below, which executes a loop 100 million times.

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

When measured in Linux using the time function, this code runs remarkably swiftly:

real    0m1.841s
user    0m1.828s
sys     0m0.012s
Salin selepas log masuk

Curiously, if the for loop is executed without being enclosed within a function:

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

Its execution time increases considerably:

real    0m4.543s
user    0m4.524s
sys     0m0.012s
Salin selepas log masuk

Why does this discrepancy occur?

Inside a Function

Examining the bytecode reveals the following when the code is within a function:

  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        
Salin selepas log masuk

Outside a Function

In contrast, when the code is executed at the top level, the bytecode is as follows:

  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        
Salin selepas log masuk

The Crux of the Issue

The distinction lies in the use of STORE_FAST versus STORE_NAME. STORE_FAST is employed when the variable (in this case, i) is a local variable (within a function), whereas STORE_NAME is utilized when the variable is a global variable (outside a function). The former is significantly more efficient.

This can be explained by the fact that when a variable is declared as local, the interpreter can optimize the code to use a specific memory location for that variable. However, when a variable is declared as global, the interpreter must search through the entire global scope to find the variable, which is a more time-consuming process.

Atas ialah kandungan terperinci Mengapa Kod Python Lebih Pantas Apabila Dilaksanakan Di Dalam Fungsi?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan