2009-04-02 24 views
23

Về "tiêu chuẩn" để đưa ý kiến ​​bên trong mã nguồn Python:Python nhận xét: # vs chuỗi

def func(): 
    "Func doc" 
    ... <code> 
    'TODO: fix this' 
    #badFunc() 
    ... <more code> 

def func(): 
    "Func doc" 
    ... <code> 
    #TODO: fix this 
    #badFunc() 
    ... <more code> 

tôi thích để bình luận chung như dây đàn thay vì tiền tố # 's. Hướng dẫn về phong cách Python chính thức không đề cập đến việc sử dụng chuỗi làm nhận xét (Nếu tôi không bỏ lỡ nó khi đọc nó).

Tôi thích nó theo cách đó chủ yếu là vì tôi nghĩ rằng ký tự # trông xấu xí với các khối nhận xét. Theo như tôi biết những dây này không làm gì cả.

Có bất lợi khi thực hiện việc này không?

Trả lời

59

Không sử dụng sai chuỗi (tuyên bố không có ý kiến) làm nhận xét. Tài liệu, ví dụ: chuỗi đầu tiên trong một mô-đun, lớp hoặc chức năng, đặc biệt và được khuyến khích.

Lưu ý rằng tài liệu là tài liệu và tài liệu cũng như nhận xét là hai điều khác nhau!

  • Tài liệu là quan trọng để hiểu những gì mã lệnh thực hiện.
  • Nhận xét giải thích cách mã số thực hiện điều đó.

Tài liệu được đọc bởi những người sử dụng mã của bạn, ý kiến ​​của những người muốn hiểu mã của bạn, ví dụ để duy trì nó.

Sử dụng dây cho commentation có những nhược điểm (tiềm năng) sau:

  • Nó lẫn lộn những người không biết rằng chuỗi không có gì.
  • Nhận xét và chuỗi ký tự được đánh dấu khác nhau trong trình chỉnh sửa mã, do đó, kiểu của bạn có thể làm cho mã của bạn khó đọc hơn.
  • Nó có thể ảnh hưởng đến hiệu suất và/hoặc sử dụng bộ nhớ (nếu chuỗi không được loại bỏ trong quá bytecode biên soạn, loại bỏ ý kiến ​​được thực hiện vào mức độ quét để nó dứt khoát rẻ hơn)

quan trọng nhất cho các lập trình viên Python: Đó là không phải pythonic:

Nên có một-- và tốt nhất là chỉ có một - cách rõ ràng để thực hiện.

Theo tiêu chuẩn, hãy sử dụng nhận xét.

+7

Để ghi lại, có vẻ như nó sẽ không ảnh hưởng đến hiệu suất. Nhìn vào dis.dis đầu ra, hoặc chạy chuỗi trên một mô-đun biên dịch cho thấy không có dấu vết của các chuỗi, do đó, có vẻ như họ đang tối ưu hóa đi trong quá trình biên dịch. (Các lý do khác là quá đủ tuy nhiên) – Brian

4

Tôi nghĩ rằng chỉ chuỗi đầu tiên trong một định nghĩa (hoặc lớp) là "đặc biệt", tức là được lưu bởi trình thông dịch vào đối tượng được xác định (hoặc lớp ') docstring.

Bất kỳ chuỗi ký tự chuỗi nào khác bạn đặt trong mã sẽ, lúc tệ nhất, có nghĩa là trình thông dịch sẽ tạo giá trị chuỗi tại thời gian chạy, và sau đó chỉ cần vứt nó đi. Điều này có nghĩa rằng làm "bình luận" bằng cách xả rác mã với hằng số chuỗi có thể chi phí, hiệu suất khôn ngoan.

Tất nhiên, tôi chưa đo điểm chuẩn này, và cũng không biết thông dịch viên Python đủ tốt để nói chắc chắn.

5

Những bất lợi, tất nhiên, là người khác đọc nó sẽ thấy rằng các chuỗi mã và chuỗi nhận xét được xen kẽ, có thể gây nhầm lẫn.