2012-12-26 13 views

Trả lời

16

Bạn gây ô nhiễm không gian tên của mình với các tên có thể ảnh hưởng đến các biến của bạn và chiếm một số bộ nhớ.
Ngoài ra, bạn sẽ có thời gian khởi động lâu hơn vì chương trình phải tải mô-đun.

Trong mọi trường hợp, tôi sẽ không trở nên quá loạn thần với điều này, như thể bạn đang viết mã, bạn có thể kết thúc bằng văn bản và xóa import os liên tục khi mã của bạn được sửa đổi. Một số IDE như PyCharm phát hiện các nhập khẩu không được sử dụng để bạn có thể dựa vào chúng sau khi mã của bạn được hoàn thành hoặc gần hoàn thành.

+1

Vì vậy, chương trình sẽ mất nhiều thời gian hơn so với các nhập khẩu không cần thiết đó. đúng ? –

+0

đúng đó là – joaquin

+0

Thời gian khởi động trễ có thể được hiển thị bằng cách tạo một loạt các tệp có 'in 'Xin chào", __name__' và sau đó nhập chúng. Mọi thứ được nhập phải được phân tích cú pháp ít nhất một lần và phiên bản pyc/cache được giải thích ít nhất một lần cho mỗi chu kỳ chạy. Điều đó có thể bị mất một chút, đặc biệt nếu một tệp được nhập khẩu nhập các tệp khác nhập nhiều tệp hơn. – David

6

"chưa sử dụng" có thể là một chút khó khăn hơn để xác định hơn bạn nghĩ, ví dụ mã này trong test.py:

import sys 
import unused_stuff 
sys.exit(0) 

unused_stuff có vẻ là không sử dụng, nhưng nếu nó là để chứa:

import __main__ 
def f(x): print "Oh no you don't" 
__main__.sys.exit = f 

Sau đó chạy test.py không làm những gì bạn mong đợi từ một cái nhìn bình thường.

+0

hy vọng không ai viết thư viện với mã như vậy. Việc nhập này sẽ nguy hiểm ngay cả khi OP dự định sử dụng ** mô-đun đó. – joaquin

+2

@joaquin Đúng, đây là một ví dụ cực đoan, nhưng điều đó không có nghĩa là không có mô-đun mà khi được tải có nhiều tác dụng phụ tinh tế hơn. Nó có nghĩa là một minh họa tầm thường về một tác dụng phụ :) – Flexo

+3

Có hai mô-đun mà tôi có trong thư viện cá nhân có API duy nhất là việc nhập, nghĩa là tất cả những gì bạn làm là nhập chúng không có gì để gọi. Đầu tiên là nice.py, chạy chương trình ở mức ưu tiên thấp hơn, chương trình còn lại là timer.py, cài đặt một trình xử lý ngoại lệ để báo cáo thời gian và dấu thời gian đã trôi qua khi chương trình đang chạy kết thúc. Cả hai đều giống như chúng không được sử dụng, nhưng trên thực tế, chúng chỉ có một API siêu nhỏ gọn. – PaulMcG

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