2010-01-13 40 views
21

Python có thể chạy tập lệnh ở chế độ được tối ưu hóa (-O) để tắt các lỗi như khẳng định và nếu tôi nhớ cũng xóa các tài liệu. Tôi đã không nhìn thấy nó được sử dụng thực sự và có lẽ nó chỉ là hiện vật của thời gian qua. Nó đang được sử dụng? Để làm gì?chế độ tối ưu hóa python

Tại sao điều vô dụng này bị xóa trong Python 3?

+0

câu hỏi hay nhưng không biết tại sao bạn muốn xóa nó !! –

Trả lời

28

Nó tiết kiệm một lượng bộ nhớ nhỏ và một lượng nhỏ dung lượng đĩa nếu bạn phân phối bất kỳ biểu mẫu lưu trữ nào chỉ chứa các tệp .pyo. (Nếu bạn sử dụng assert rất nhiều, và có lẽ với điều kiện phức tạp, tiền tiết kiệm có thể không nhỏ và có thể kéo dài đến thời gian chạy).

Vì vậy, nó chắc chắn không phải vô dụng - và tất nhiên nó đang được sử dụng (nếu bạn triển khai một chương trình máy chủ Python-mã hoá để một số lượng lớn N của máy server, tại sao bao giờ bạn sẽ muốn lãng phí N * X byte để giữ docstrings mà không ai, bao giờ, anyway sẽ có thể truy cập ?!). Tất nhiên nó sẽ tốt hơn nếu nó tiết kiệm nhiều hơn, nhưng, này - không lãng phí, không muốn! -)

Vì vậy, nó không có nhiều trí tuệ để giữ chức năng này. cung cấp, bạn biết ;-) trong Python 3 - tại sao thêm ngay cả "epsilon" để những khó khăn của việc áp dụng sau này?-)

3

Xóa xác nhận có nghĩa là lợi ích hiệu suất nhỏ, vì vậy bạn có thể sử dụng điều này cho mã "phát hành". Dù sao thì không ai sử dụng nó vì nhiều thư viện Python được mở nguồn và do đó chức năng help() sẽ hoạt động.

Vì vậy, miễn là không có bất kỳ tối ưu hóa thực nào ở chế độ này, bạn có thể bỏ qua nó.

6

Phần mềm được đóng gói sẵn trong các bản phân phối Linux khác nhau thường được biên dịch byte bằng -O. Ví dụ: nếu từ Fedora packaging guidelines đối với các ứng dụng python:

Trước đây, thực tế là tập tin% ghost .pyo phổ biến để tiết kiệm một lượng nhỏ không gian trên hệ thống tệp của người dùng. Tuy nhiên, điều này có hai vấn đề: 1. Với SELinux, nếu người dùng đang chạy python -O [APP], nó sẽ cố gắng viết .pyos khi chúng không tồn tại. Điều này dẫn đến các bản ghi từ chối AVC trong nhật ký. 2. Nếu người quản trị hệ thống chạy python -OO [APP] thì .pyos sẽ được tạo ra không có docstrings. Một số chương trình yêu cầu docstrings để hoạt động. Trong lần chạy tiếp theo với python -O [APP] python sẽ sử dụng tệp .pyos được lưu trong bộ nhớ cache mặc dù đã yêu cầu mức tối ưu hóa khác. Cách duy nhất để sửa lỗi này là tìm ra nơi .pyos đang xóa chúng.

Phương pháp xử lý tệp pyo hiện tại là bao gồm chúng, không có% ghosting.

38

python -O hiện hiện sau:

  • hoàn toàn bỏ qua khẳng định
  • bộ các BUILTIN tên đặc biệt __debug__ False (mà theo mặc định là True)

và khi gọi như python -OO

  • xóa docstrings khỏi mã

Tôi không biết tại sao mọi người quên đề cập đến vấn đề __debug__; có lẽ đó là bởi vì tôi là người duy nhất sử dụng nó :) An xây dựng if __debug__ tạo ra không có bytecode ở tất cả khi chạy dưới -O, và tôi thấy rằng rất hữu ích.