Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Python

Tại sao code Python chạy nhanh hơn trong hàm?

Code Python chạy nhanh hơn bên trong hàm so với cấp độ module (global scope) do hai lý do chính:

1. Truy cập biến local nhanh hơn global

  • Trong hàm: biến local lưu trong fixed-size array (mảng kích thước cố định), tên biến ánh xạ tới index. Truy cập = pointer lookup + tăng refcount -> cực nhanh.
  • Global scope: biến lưu trong dictionary (globals()). Truy cập = hash lookup -> chậm hơn.

2. Opcode prediction (Dự đoán opcode)

CPython (bản triển khai chuẩn) biên dịch code thành bytecode và chạy trong vòng lặp đánh giá (evaluation loop). Khi chạy trong hàm, trình thông dịch có thể tối ưu hóa chuỗi opcode (ví dụ: LOAD_FAST, STORE_FAST) nhờ biết trước cấu trúc biến local.

Minh họa

import timeit

# Global variable
x = 0
def global_loop():
    global x
    for i in range(1000000):
        x += 1

# Local variable
def local_loop():
    x = 0
    for i in range(1000000):
        x += 1
    return x

print("Global:", timeit.timeit(global_loop, number=5))
print("Local:", timeit.timeit(local_loop, number=5))
# Local thường nhanh hơn 20-30%

Tóm tắt

  • Biến local: mảng (array) -> O(1) truy cập trực tiếp.
  • Biến global: dict -> O(1) nhưng overhead hash lớn hơn.
  • Attribute lookup (obj.attr) mới là chậm nhất.
  • Nên viết code trong hàm thay vì script toàn cục để tận dụng tốc độ.