2011-11-08 32 views

Trả lời

7

Điều này chủ yếu là do tra cứu biến. Tìm kiếm một biến trong phạm vi toàn cầu yêu cầu tra cứu từ điển. Ngược lại, trình biên dịch xác định tên địa phương tĩnh và tham chiếu chúng theo chỉ mục, do đó không cần tra cứu từ điển.

Lưu ý rằng trong Python 2.x sự hiện diện của câu lệnh exec bên trong một hàm sẽ hủy kích hoạt tối ưu hóa này, vì tên không thể được xác định tĩnh nữa. Trong Python 3.x, exec() là một hàm bình thường, và do đó nó không được phép thay đổi các biến trong phạm vi cục bộ.

+0

Vì vậy, tôi đoán điều này cũng đúng đối với Jython, IronPython và PyPy? Tất cả chúng có thực hiện phạm vi toàn cầu bằng tra cứu từ điển và phạm vi cục bộ bằng cách sử dụng danh sách không? – inman320

+0

@ inman320: Không, điều này không giữ cho các triển khai Python khác. Trong PyPy, không nên có sự khác biệt về tốc độ giữa mã ở cấp mô-đun hoặc hàm tương ứng (chúng sử dụng trình biên dịch JIT). Tôi không biết các triển khai khác hoạt động như thế nào. –

Các vấn đề liên quan