Hai khái niệm có thể giúp chúng ta hiểu rõ hơn tại sao Python được biên dịch thành mã máy gốc "có thể" không chạy nhanh như C được biên dịch hoặc các ngôn ngữ được biên dịch phổ biến khác. Chúng được gọi là ràng buộc sớm và ràng buộc muộn.
Tôi nên bắt đầu bằng cách nói rằng tôi không phải là một chuyên gia về Python và tôi đã vô tình đến trang web này. Nhưng tôi thích trang web này.
Như đã đề cập trong một phản hồi khác ở đây, trình biên dịch C ++ có thể biết rất nhiều về chương trình và đưa ra quyết định về việc sử dụng thao tác nào cho các cấu trúc dữ liệu cụ thể. Như một ví dụ nếu hai biến số nguyên cần được thêm vào với nhau, trình biên dịch biết chúng là số nguyên riêng, ví dụ rộng 32 bit và nó có thể thêm chúng cùng với một lệnh "THÊM". Vì vậy, nó biên dịch lệnh ADD vào mã. Nó bị khóa và không thể thay đổi trong khi chương trình đang chạy. Đó là ràng buộc sớm.
Mặt khác, trong một ngôn ngữ như Python, chúng ta có thể mong đợi chương trình sẽ ném các loại dữ liệu khác nhau theo những cách phức tạp. Bây giờ trình biên dịch không biết nếu 2 biến của chúng ta là số nguyên, số float, chuỗi hoặc danh sách. Vì vậy, nó phải biên dịch mã xác định thông tin đó trong thời gian chạy và chọn thao tác chính xác trong khi chương trình đang chạy. Đây là ràng buộc muộn và chúng tôi có thể hiểu rằng sẽ có một cú hích hiệu năng để thực hiện công việc bổ sung đó trong khi chương trình đang chạy. Đó là cái giá bạn phải trả cho việc giữ các tùy chọn đó mở bằng ngôn ngữ như Python nhưng nó cung cấp sự linh hoạt trong thời gian chạy tối đa.