Kẻ nói dối Python tốt nhất

Hàng ngày, chúng ta được bao quanh bởi nhiều quy tắc khác nhau để làm cho cuộc sống của chúng ta dễ dàng hơn. Ví dụ, người lái xe phải tuân theo mã đường cao tốc. Nhờ vậy, mỗi người lái xe đều biết cách cư xử trên đường và những quy tắc cần tuân theo. Do đó, lái xe an toàn hơn, hành vi của người lái xe có thể dự đoán được và mọi người đều biết cách lái xe sao cho người khác hiểu được ý định của họ. Đối với Python, có một mã đường cao tốc tương đương có tên là Đề xuất cải tiến Python [PEP]. Tài liệu này chứa các quy tắc để cải thiện mã Python của bạn bằng cách làm cho mã dễ đọc và nhất quán hơn. Thật không may, ngay cả những lập trình viên có kinh nghiệm cũng có thể gặp sự cố khi nhớ lại tất cả các quy tắc được viết trong PEP. Đây là lý do tại sao Python linters được tạo ra

Linters là gì?

Linters là các chương trình tư vấn về chất lượng mã bằng cách hiển thị các cảnh báo và lỗi. Họ có thể phát hiện các lỗi mã Python của bạn, nhận thấy các mẫu mã không hợp lệ và tìm các phần tử không tuân theo quy ước của bạn. Linter Python có một số lợi thế, chẳng hạn như.  

  • Ngăn chặn lỗi trong một dự án
  • Làm cho mã có thể đọc được cho bất kỳ lập trình viên python nào
  • Bắt các đoạn mã không cần thiết
  • Làm cho mã sạch hơn và ít phức tạp hơn

Tất nhiên, phương pháp nào cũng có nhược điểm của nó.

  • Linters có thể trả lại kết quả dương tính giả
  • Quá trình này có thể tốn nhiều thời gian
  • Một số lỗi có thể bỏ qua.  

Có rất nhiều công cụ Python mà bạn có thể tận dụng trong công việc hàng ngày của mình. Sơ đồ logic cho chúng ta biết về các lỗi mã thực tế và sơ đồ thống kê giúp lập trình viên phát hiện các vấn đề về định dạng. Tôi sẽ trình bày cách cài đặt và chạy các linters phổ biến nhất như

  • Pylint [phiên bản 2. 12. 1]
  • Flake8 [phiên bản 4. 0. 1]
  • PyFlakes [phiên bản 2. 4. 0]

Hơn nữa, bạn sẽ tìm thấy một so sánh của từng đầu ra. Điều này có thể giúp bạn chọn máy nói dối phù hợp nhất với nhu cầu của bạn

Một ví dụ về mã Python chất lượng kém

Hãy viết một số mã có một số lỗi và không tuân theo các quy tắc PEP. Sau đó, chúng tôi sẽ kiểm tra chất lượng mã Python bằng cách sử dụng các bộ lọc khác nhau với cấu hình mặc định

import math;                       
global_value = 0                   
def Bad_Quality_Function[argument1]:
      a = [1,2,3]
      a[10] = 10
      DivideByZero = math.e/0
      if a[10]==1:
          Another_Bad_Quality_Function[]
      else:
          return result
      pass

Dưới đây một số vấn đề với mã ví dụ được liệt kê

  • dấu chấm phẩy không cần thiết trong nhập toán học;
  • thiếu dòng mới và khoảng trắng
  • thiếu chuỗi tài liệu
  • chưa sử dụng global_value  và argument1
  • cách đặt tên không chính xác
  • chọn phần tử từ danh sách có chỉ mục không chính xác
  • chia cho biểu thức không
  • gọi một phương thức không tồn tại
  • trả về giá trị không xác định
  • câu lệnh vượt quakhông cần thiết

giá treo

Pylint là một công cụ phân tích mã Python tĩnh để tìm các lỗi lập trình và kiểu dáng, lỗi, cấu trúc mã không hợp lệ và sự không nhất quán với các tiêu chuẩn mã hóa. Hơn nữa, Pylint có thể được tùy chỉnh theo nhu cầu của chúng tôi bằng cách làm im lặng một số lỗi được báo cáo, ví dụ:. g. thông báo đầu ra chỉ có thể chứa thông tin về lỗi đối với các sự cố lập trình quan trọng nhất

Thông báo Pylint bao gồm năm loại lỗi

  • R – có nghĩa là bạn phải cấu trúc lại mã theo các phương pháp lập trình tốt
  • C – mã của bạn vi phạm quy ước tiêu chuẩn mã hóa
  • W – cảnh báo về các vấn đề về phong cách hoặc một số vấn đề nhỏ về lập trình
  • E – có nghĩa là lỗi, có các vấn đề lập trình quan trọng
  • F – lỗi nghiêm trọng dừng xử lý mã

Để có được Pylint, bạn có thể sử dụng pip

pip install pylint

Để chạy tập lệnh Python này, chỉ cần viết

pylint script.py 

trong bảng điều khiển của bạn, nơi tập lệnh. py là tên của tập lệnh Python với ví dụ mã xấu của chúng tôi

[venv] user@user project % pylint script.py   

************* Module main

main.py:1:0: W0301: Unnecessary semicolon [unnecessary-semicolon]

main.py:12:0: C0305: Trailing newlines [trailing-newlines]

main.py:1:0: C0114: Missing module docstring [missing-module-docstring]

main.py:2:0: C0103: Constant name "global_value" doesn't conform to UPPER_CASE naming style [invalid-name]

main.py:3:0: C0103: Function name "Bad_Quality_Function" doesn't conform to snake_case naming style [invalid-name]

main.py:3:0: C0116: Missing function or method docstring [missing-function-docstring]

main.py:4:4: C0103: Variable name "a" doesn't conform to snake_case naming style [invalid-name]

main.py:6:4: C0103: Variable name "DivideByZero" doesn't conform to snake_case naming style [invalid-name]

main.py:8:8: E0602: Undefined variable 'Another_Bad_Quality_Function' [undefined-variable]

main.py:11:8: W0101: Unreachable code [unreachable]

main.py:10:15: E0602: Undefined variable 'result' [undefined-variable]

main.py:11:8: W0107: Unnecessary pass statement [unnecessary-pass]

main.py:3:0: R1710: Either all return statements in a function should return an expression, or none of them should. [inconsistent-return-statements]

main.py:3:25: W0613: Unused argument 'argument1' [unused-argument]

main.py:6:4: W0612: Unused variable 'DivideByZero' [unused-variable]

----------------------------------------------------------------------

Your code has been rated at -13.00/10 [previous run: -13.00/10, +0.00]

Thông báo đầu ra của Pylint thông báo về 15 vấn đề cần được giải quyết nếu chúng ta muốn cải thiện chất lượng mã Python. Hãy tóm tắt chúng trong bảng dưới đây

Pylint đã thông báo cho chúng tôi về tất cả các lỗi mà chúng tôi đã dự kiến, ngoài các lỗi liên quan đến việc chọn một phần tử từ danh sách có chỉ mục không chính xác, biểu thức chia cho 0 và thiếu khoảng trắng. Ngoài ra, Pylint đã chỉ ra rằng sau câu lệnh if-else, mã sẽ không thể truy cập được, điều đó có nghĩa là nó sẽ không bao giờ được thực thi. Ở cuối thông báo của Pylint, chúng ta có thể thấy rằng Pylint đã xếp hạng mã ở mức -13. 00/10 [vâng, trừ mười ba. ].  

vảy8

Một ví dụ khác về kẻ nói dối Python là Flake8. Nó trả về một báo cáo chứa thông tin về kiểu dáng không chính xác, lỗi cú pháp không nhất quán và lỗi phức tạp. Có nhiều tùy chọn bổ sung cho phép bạn điều chỉnh Flake8 theo nhu cầu của mình

Flake8 chạy ba công cụ được liệt kê bên dưới bằng cách khởi chạy một lệnh flake8 .

  • pycodestyle – kiểm tra phong cách
  • PyFlakes – kiểm tra cú pháp
  • Tập lệnh McCabe của Ned Batchelder – kiểm tra độ phức tạp

Đầu ra của Flake8 bao gồm các loại lỗi như

  • E – lỗi phong cách
  • W – cảnh báo kiểu
  • F – lỗi cú pháp
  • C – lỗi phức tạp
  • N – lỗi quy ước đặt tên

Để cài đặt Flake8, bạn có thể sử dụng pip

pip install flake8 

Chạy Flake8 thật dễ dàng. chạy

flake8 script.py

để xem kết quả

[venv] user@user project % flake8 script.py            

main.py:1:12: E703 statement ends with a semicolon

main.py:3:1: E302 expected 2 blank lines, found 0

main.py:4:11: E231 missing whitespace after ','

main.py:4:13: E231 missing whitespace after ','

main.py:6:5: F841 local variable 'DivideByZero' is assigned to but never used

main.py:7:13: E225 missing whitespace around operator

main.py:8:9: F821 undefined name 'Another_Bad_Quality_Function'

main.py:10:16: F821 undefined name 'result'

main.py:12:1: W391 blank line at end of file

Flake8 đã báo cáo 9 lỗi có thể xảy ra. Hãy tóm tắt chúng trong một bảng

Flake8 đã xác định dấu chấm phẩy không cần thiết, thiếu dòng mới và khoảng trắng, đối số cục bộ không được sử dụng [nhưng nó không báo cáo đối số toàn cầu không được sử dụng], trả về giá trị không xác định và phương thức gọi không tồn tại. Thông báo đầu ra này chắc chắn ít chi tiết hơn thông báo của Pylint, nhưng đây chính là lý do tại sao một số nhà phát triển thích Flake8 hơn. Nó chỉ báo cáo về các lỗi kiểu, cú pháp và độ phức tạp quan trọng nhất

PyFlakes

PyFlakes phân tích mã python cho các lỗi đơn giản. PyFlakes sẽ không bao giờ phàn nàn về phong cách và sẽ rất cố gắng để không bao giờ đưa ra những thông tin sai lệch

Để cài đặt Pyflakes, hãy sử dụng pip

pip install pyflakes

Chạy Python linter này rất giống với Pylint và Flake8. Chỉ cần viết tên chương trình và đường dẫn đến mã của bạn như trong ví dụ

________số 8_______

PyFlakes chỉ báo cáo 3 vấn đề. Hãy tóm tắt chúng trong một bảng

PyFlakes chỉ phàn nàn về phương thức gọi không tồn tại và đối số không sử dụng. Đầu ra rõ ràng và lỗi không được phân loại thành các loại cụ thể

Cái nào là kẻ nói dối trăn tốt nhất cho dự án của bạn?

Khách quan lựa chọn các công cụ lập trình tốt nhất có lẽ là không thể. Vấn đề là, một số công nghệ và công cụ phù hợp với một loại dự án, trong khi những công nghệ và công cụ khác lại tốt hơn cho các loại dự án khác. Vì vậy, làm thế nào để bạn chọn các linters thích hợp cho dự án của bạn? . Nếu bạn muốn cải thiện mã Python của mình bằng linters – và bạn thực sự nên tận dụng chúng trong công việc của mình – trước tiên hãy thử những đề xuất trong bài viết này

Phần kết luận

Trong bài viết này, tôi đã so sánh ba linter. Pylint, Flake8 và PyFlakes. Mỗi chương trình được chạy mà không cần bất kỳ cài đặt bổ sung nào. Pylint đã báo cáo hầu hết các lỗi, bao gồm một số lỗi mà chúng tôi không mong đợi [mã không thể truy cập được sau câu lệnh if-else]. Flake8 đã báo cáo ít lỗi hơn Pylint. Nó không thông báo cho chúng tôi về việc thiếu chuỗi tài liệu, kiểu đặt tên không chính xác và câu lệnh vượt qua không cần thiết. Tuy nhiên, chỉ có Flake8 báo cáo thiếu khoảng trắng. PyFlakes trả về danh sách lỗi ngắn nhất. Nó chỉ báo cáo về đối số không được sử dụng, giá trị không xác định và phương thức gọi không tồn tại. Không có linters nào được thử nghiệm cảnh báo chúng tôi về việc chọn một phần tử từ danh sách có chỉ số không chính xác hoặc biểu thức chia cho 0. Mặc dù vậy, điều này có thể giải thích được vì đây không phải là lỗi văn phong, mà là lỗi logic.

Rất khó để quyết định loại xơ vải nào được thử nghiệm trong bài viết này là tốt nhất. Xin lưu ý rằng mỗi công cụ có thể được tùy chỉnh với các cài đặt bổ sung. Tuy nhiên, tôi hy vọng rằng bài viết đã giúp bạn chọn được chiếc máy nói dối phù hợp nhất với nhu cầu của bạn. Liên hệ với chúng tôi nếu bạn cần hỗ trợ từ các lập trình viên Python có kinh nghiệm cho dự án của bạn

Flake8 có tốt hơn Pylint không?

Pylint có xu hướng chậm hơn Pyflakes và flake8 cũng như đưa ra nhiều kết quả dương tính giả hơn . Tôi sẽ sử dụng Pylint nếu bạn muốn đặc biệt kỹ lưỡng với mã của mình.

Rác tốt nhất là gì?

Các công cụ linting giao diện người dùng hàng đầu để phát triển web .
CSS Lint
SublimeLinter CSSLint
Trình xác thực CSS của W3C
JSLint
ESLint
JSHint
phong cách Lint

Ngôn ngữ Python tiêu chuẩn là gì?

Linter là chương trình tư vấn về chất lượng mã bằng cách hiển thị cảnh báo và lỗi . Họ có thể phát hiện các lỗi mã Python của bạn, nhận thấy các mẫu mã không hợp lệ và tìm các phần tử không tuân theo quy ước của bạn. Linter Python có một số lợi thế, chẳng hạn như. Ngăn chặn lỗi trong một dự án.

Tương đương với ESLint trong Python là gì?

Đây là một công cụ phân tích mã tĩnh Python tìm kiếm các lỗi lập trình, giúp thực thi tiêu chuẩn mã hóa, phát hiện mùi mã và đưa ra các đề xuất tái cấu trúc đơn giản. ESLint và Pylint có thể được phân loại là công cụ "Đánh giá mã". ESLint và Pylint đều là các công cụ mã nguồn mở.

Chủ Đề