Nhận xét lớp python thực hành tốt nhất

Nhận xét mô tả những gì đang xảy ra bên trong một chương trình để một người nhìn vào mã nguồn không gặp khó khăn trong việc tìm ra nó

Trong bài viết này, bạn sẽ học

  • Cách thêm nhận xét vào mã Python của bạn
  • Sự cần thiết của các ý kiến
  • Nhận xét nội tuyến, nhận xét khối và nhận xét nhiều dòng là gì
  • Việc sử dụng các bình luận chuỗi doc

Mục lục

  • Bình luận trong Python là gì?
  • Nhận xét một dòng
  • Nhận xét nhiều dòng
  • Thêm nhận xét hợp lý
  • Nhận xét nội tuyến
  • chặn bình luận
  • Nhận xét về chuỗi tài liệu
  • Nhận xét mã để kiểm tra
  • Sử dụng chuỗi ký tự cho nhận xét nhiều dòng
  • Bản tóm tắt

Bình luận trong Python là gì?

Các chú thích là những mô tả giúp người lập trình hiểu chức năng của chương trình. Vì vậy, bình luận là cần thiết trong khi viết mã bằng Python

Tài liệu này đưa ra các quy ước viết mã cho mã Python bao gồm thư viện chuẩn trong bản phân phối Python chính. Vui lòng xem PEP thông tin đi kèm mô tả các nguyên tắc về kiểu dáng cho mã C trong triển khai C của Python

Tài liệu này và PEP 257 (Quy ước về chuỗi tài liệu) được điều chỉnh từ bài tiểu luận Hướng dẫn về Phong cách Python ban đầu của Guido, với một số bổ sung từ hướng dẫn về phong cách của Barry [2]

Hướng dẫn về phong cách này phát triển theo thời gian khi các quy ước bổ sung được xác định và các quy ước trước đây trở nên lỗi thời bởi những thay đổi trong chính ngôn ngữ đó

Nhiều dự án có hướng dẫn về phong cách mã hóa của riêng họ. Trong trường hợp có bất kỳ xung đột nào, các hướng dẫn dành riêng cho dự án đó sẽ được ưu tiên cho dự án đó

Một quán ngu si là tinh nghịch của tâm trí nhỏ

Một trong những hiểu biết quan trọng của Guido là mã được đọc thường xuyên hơn nhiều so với mã được viết. Các nguyên tắc được cung cấp ở đây nhằm cải thiện khả năng đọc mã và làm cho mã nhất quán trên nhiều loại mã Python. Như PEP 20 nói, "Khả năng đọc được tính"

Hướng dẫn về phong cách là về tính nhất quán. Tính nhất quán với hướng dẫn phong cách này là rất quan trọng. Tính nhất quán trong một dự án quan trọng hơn. Tính nhất quán trong một mô-đun hoặc chức năng là quan trọng nhất

Tuy nhiên, hãy biết khi nào không nhất quán - đôi khi các đề xuất hướng dẫn về phong cách không áp dụng được. Khi nghi ngờ, hãy sử dụng phán đoán tốt nhất của bạn. Nhìn vào các ví dụ khác và quyết định những gì có vẻ tốt nhất. Và đừng ngần ngại hỏi

Đặc biệt. không phá vỡ khả năng tương thích ngược chỉ để tuân thủ PEP này

Một số lý do chính đáng khác để bỏ qua một hướng dẫn cụ thể

  1. Khi áp dụng hướng dẫn sẽ làm cho mã khó đọc hơn, ngay cả đối với người đã quen đọc mã tuân theo PEP này
  2. Để phù hợp với mã xung quanh cũng phá vỡ nó (có thể vì lý do lịch sử) – mặc dù đây cũng là cơ hội để dọn dẹp mớ hỗn độn của người khác (theo phong cách XP thực sự)
  3. Bởi vì mã được đề cập có trước khi đưa ra hướng dẫn và không có lý do nào khác để sửa đổi mã đó
  4. Khi mã cần duy trì khả năng tương thích với các phiên bản Python cũ hơn không hỗ trợ tính năng được hướng dẫn về phong cách đề xuất

Bố cục mã

thụt đầu dòng

Sử dụng 4 dấu cách cho mỗi mức thụt đầu dòng

Các dòng tiếp tục phải căn chỉnh các phần tử được bao bọc theo chiều dọc bằng cách sử dụng dòng ẩn của Python nối bên trong dấu ngoặc đơn, dấu ngoặc và dấu ngoặc nhọn hoặc sử dụng thụt lề treo [1]. Khi sử dụng thụt lề treo, cần xem xét những điều sau đây;

# Correct:

# Aligned with opening delimiter.
foo = long_function_name(var_one, var_two,
                         var_three, var_four)

# Add 4 spaces (an extra level of indentation) to distinguish arguments from the rest.
def long_function_name(
        var_one, var_two, var_three,
        var_four):
    print(var_one)

# Hanging indents should add a level.
foo = long_function_name(
    var_one, var_two,
    var_three, var_four)

# Wrong:

# Arguments on first line forbidden when not using vertical alignment.
foo = long_function_name(var_one, var_two,
    var_three, var_four)

# Further indentation required as indentation is not distinguishable.
def long_function_name(
    var_one, var_two, var_three,
    var_four):
    print(var_one)

Quy tắc 4 dấu cách là tùy chọn cho các dòng tiếp theo

Không bắt buộc

# Hanging indents *may* be indented to other than 4 spaces.
foo = long_function_name(
  var_one, var_two,
  var_three, var_four)

Khi phần điều kiện của một câu lệnh

# Wrong:
# operators sit far away from their operands
income = (gross_wages +
          taxable_interest +
          (dividends - qualified_dividends) -
          ira_deduction -
          student_loan_interest)
7 đủ dài để yêu cầu nó được viết trên nhiều dòng, điều đáng chú ý là sự kết hợp của một từ khóa gồm hai ký tự (i. e.
# Wrong:
# operators sit far away from their operands
income = (gross_wages +
          taxable_interest +
          (dividends - qualified_dividends) -
          ira_deduction -
          student_loan_interest)
7), cộng với một dấu cách, cộng với dấu ngoặc đơn mở sẽ tạo ra một khoảng thụt lề 4 dấu cách tự nhiên cho các dòng tiếp theo của câu điều kiện nhiều dòng. Điều này có thể tạo ra xung đột trực quan với bộ mã thụt lề được lồng bên trong câu lệnh
# Wrong:
# operators sit far away from their operands
income = (gross_wages +
          taxable_interest +
          (dividends - qualified_dividends) -
          ira_deduction -
          student_loan_interest)
7, vốn dĩ cũng sẽ được thụt vào 4 khoảng trắng. PEP này không có quan điểm rõ ràng về cách thức (hoặc liệu) có phân biệt trực quan hơn nữa các dòng điều kiện như vậy với bộ lồng nhau bên trong câu lệnh
# Wrong:
# operators sit far away from their operands
income = (gross_wages +
          taxable_interest +
          (dividends - qualified_dividends) -
          ira_deduction -
          student_loan_interest)
7 hay không. Các tùy chọn có thể chấp nhận được trong tình huống này bao gồm, nhưng không giới hạn ở

# No extra indentation.
if (this_is_one_thing and
    that_is_another_thing):
    do_something()

# Add a comment, which will provide some distinction in editors
# supporting syntax highlighting.
if (this_is_one_thing and
    that_is_another_thing):
    # Since both conditions are true, we can frobnicate.
    do_something()

# Add some extra indentation on the conditional continuation line.
if (this_is_one_thing
        and that_is_another_thing):
    do_something()

(Cũng xem phần thảo luận về việc ngắt trước hay sau toán tử nhị phân bên dưới. )

Dấu ngoặc nhọn/dấu ngoặc vuông/dấu ngoặc đơn trên các cấu trúc nhiều dòng có thể xếp hàng dưới ký tự không phải khoảng trắng đầu tiên của dòng cuối cùng của danh sách, như trong

________số 8

hoặc nó có thể được xếp dưới ký tự đầu tiên của dòng bắt đầu cấu trúc nhiều dòng, như trong

my_list = [
    1, 2, 3,
    4, 5, 6,
]
result = some_function_that_takes_arguments(
    'a', 'b', 'c',
    'd', 'e', 'f',
)

Tab hoặc Spaces?

Khoảng trắng là phương pháp thụt đầu dòng ưa thích

Các tab chỉ nên được sử dụng để duy trì tính nhất quán với mã đã được thụt lề bằng các tab

Python không cho phép trộn các tab và dấu cách để thụt đầu dòng

Độ dài dòng tối đa

Giới hạn tất cả các dòng tối đa 79 ký tự

Đối với các khối văn bản dài có ít hạn chế về cấu trúc hơn (chuỗi tài liệu hoặc nhận xét), độ dài dòng nên được giới hạn ở 72 ký tự

Việc giới hạn độ rộng cửa sổ trình chỉnh sửa được yêu cầu giúp có thể mở nhiều tệp cạnh nhau và hoạt động tốt khi sử dụng các công cụ xem xét mã hiển thị hai phiên bản trong các cột liền kề

Gói mặc định trong hầu hết các công cụ phá vỡ cấu trúc trực quan của mã, khiến nó trở nên khó hiểu hơn. Các giới hạn được chọn để tránh ngắt dòng trong trình chỉnh sửa có chiều rộng cửa sổ được đặt thành 80, ngay cả khi công cụ đặt một hình tượng đánh dấu trong cột cuối cùng khi ngắt dòng. Một số công cụ dựa trên web có thể hoàn toàn không cung cấp tính năng ngắt dòng động

Một số đội thực sự thích chiều dài dòng dài hơn. Đối với mã được duy trì độc quyền hoặc chủ yếu bởi một nhóm có thể đạt được thỏa thuận về vấn đề này, bạn có thể tăng giới hạn độ dài dòng lên tới 99 ký tự, miễn là các nhận xét và chuỗi tài liệu vẫn được gói gọn trong 72 ký tự

Thư viện chuẩn Python là bảo thủ và yêu cầu giới hạn dòng ở 79 ký tự (và tài liệu/nhận xét đến 72)

Cách ưu tiên để gói các dòng dài là sử dụng phần tiếp theo dòng ngụ ý của Python bên trong dấu ngoặc đơn, dấu ngoặc và dấu ngoặc nhọn. Các dòng dài có thể được chia thành nhiều dòng bằng cách gói các biểu thức trong ngoặc đơn. Chúng nên được sử dụng thay vì sử dụng dấu gạch chéo ngược để tiếp tục dòng

Đôi khi, dấu gạch chéo ngược vẫn có thể phù hợp. Ví dụ: câu lệnh

# Wrong:

# Arguments on first line forbidden when not using vertical alignment.
foo = long_function_name(var_one, var_two,
    var_three, var_four)

# Further indentation required as indentation is not distinguishable.
def long_function_name(
    var_one, var_two, var_three,
    var_four):
    print(var_one)
01 dài, nhiều câu lệnh không thể sử dụng tiếp tục ẩn trước Python 3. 10, vì vậy dấu gạch chéo ngược được chấp nhận cho trường hợp đó

# Wrong:

# Arguments on first line forbidden when not using vertical alignment.
foo = long_function_name(var_one, var_two,
    var_three, var_four)

# Further indentation required as indentation is not distinguishable.
def long_function_name(
    var_one, var_two, var_three,
    var_four):
    print(var_one)
1

(Xem phần thảo luận trước về câu lệnh if nhiều dòng để biết thêm suy nghĩ về cách thụt lề của câu lệnh

# Wrong:

# Arguments on first line forbidden when not using vertical alignment.
foo = long_function_name(var_one, var_two,
    var_three, var_four)

# Further indentation required as indentation is not distinguishable.
def long_function_name(
    var_one, var_two, var_three,
    var_four):
    print(var_one)
01 nhiều dòng như vậy. )

Một trường hợp khác như vậy là với câu lệnh

# Wrong:

# Arguments on first line forbidden when not using vertical alignment.
foo = long_function_name(var_one, var_two,
    var_three, var_four)

# Further indentation required as indentation is not distinguishable.
def long_function_name(
    var_one, var_two, var_three,
    var_four):
    print(var_one)
03

Đảm bảo thụt lề dòng tiếp theo một cách thích hợp

Nên ngắt dòng trước hay sau toán tử nhị phân?

Trong nhiều thập kỷ, phong cách được đề xuất là phá vỡ sau các toán tử nhị phân. Nhưng điều này có thể ảnh hưởng đến khả năng đọc theo hai cách. các toán tử có xu hướng nằm rải rác trên các cột khác nhau trên màn hình và mỗi toán tử được di chuyển ra khỏi toán hạng của nó và lên dòng trước đó. Ở đây, mắt phải làm việc nhiều hơn để biết mục nào được thêm và mục nào bị trừ

# Wrong:
# operators sit far away from their operands
income = (gross_wages +
          taxable_interest +
          (dividends - qualified_dividends) -
          ira_deduction -
          student_loan_interest)

Để giải quyết vấn đề dễ đọc này, các nhà toán học và nhà xuất bản của họ tuân theo quy ước ngược lại. Donald Knuth giải thích quy tắc truyền thống trong sê-ri Máy tính và Sắp chữ của mình. “Mặc dù các công thức trong một đoạn luôn ngắt sau các phép toán và quan hệ nhị phân, nhưng các công thức được hiển thị luôn ngắt trước các phép toán nhị phân” [3]

Theo truyền thống từ toán học thường dẫn đến mã dễ đọc hơn

# Wrong:

# Arguments on first line forbidden when not using vertical alignment.
foo = long_function_name(var_one, var_two,
    var_three, var_four)

# Further indentation required as indentation is not distinguishable.
def long_function_name(
    var_one, var_two, var_three,
    var_four):
    print(var_one)
0

Trong mã Python, được phép ngắt trước hoặc sau toán tử nhị phân, miễn là quy ước nhất quán cục bộ. Đối với mã mới, phong cách của Knuth được đề xuất

dòng trống

Bao quanh các định nghĩa lớp và chức năng cấp cao nhất với hai dòng trống

Các định nghĩa phương thức bên trong một lớp được bao quanh bởi một dòng trống

Các dòng trống bổ sung có thể được sử dụng (một cách tiết kiệm) để phân tách các nhóm chức năng liên quan. Các dòng trống có thể được bỏ qua giữa một loạt các dòng đơn có liên quan (e. g. một tập hợp các triển khai giả)

Sử dụng ít dòng trống trong các hàm để biểu thị các phần logic

Python chấp nhận điều khiển-L (i. e. ^L) biểu mẫu ký tự nguồn cấp dữ liệu dưới dạng khoảng trắng; . Lưu ý, một số trình chỉnh sửa và trình xem mã dựa trên web có thể không nhận ra control-L dưới dạng nguồn cấp dữ liệu biểu mẫu và sẽ hiển thị một ký tự khác ở vị trí của nó

Mã hóa tệp nguồn

Mã trong bản phân phối Python cốt lõi phải luôn sử dụng UTF-8 và không được có khai báo mã hóa

Trong thư viện chuẩn, mã hóa không phải UTF-8 chỉ nên được sử dụng cho mục đích thử nghiệm. Sử dụng ít ký tự không phải ASCII, tốt nhất là chỉ để biểu thị địa điểm và tên người. Nếu sử dụng các ký tự không phải ASCII làm dữ liệu, hãy tránh các ký tự Unicode ồn ào như z̯̯͡a̧͎̺l̡͓̫g̹̲o̡̼̘ và dấu thứ tự byte

Tất cả các mã định danh trong thư viện chuẩn Python PHẢI sử dụng các mã định danh chỉ ASCII và NÊN sử dụng các từ tiếng Anh bất cứ khi nào khả thi (trong nhiều trường hợp, chữ viết tắt và thuật ngữ kỹ thuật được sử dụng không phải tiếng Anh)

Các dự án nguồn mở với đối tượng toàn cầu được khuyến khích áp dụng chính sách tương tự

nhập khẩu

  • Nhập khẩu thường phải trên các dòng riêng biệt

    # Wrong:
    
    # Arguments on first line forbidden when not using vertical alignment.
    foo = long_function_name(var_one, var_two,
        var_three, var_four)
    
    # Further indentation required as indentation is not distinguishable.
    def long_function_name(
        var_one, var_two, var_three,
        var_four):
        print(var_one)
    
    6

    # Wrong:
    
    # Arguments on first line forbidden when not using vertical alignment.
    foo = long_function_name(var_one, var_two,
        var_three, var_four)
    
    # Further indentation required as indentation is not distinguishable.
    def long_function_name(
        var_one, var_two, var_three,
        var_four):
        print(var_one)
    
    0

    Mặc dù vậy cũng không sao khi nói điều này

    # Wrong:
    
    # Arguments on first line forbidden when not using vertical alignment.
    foo = long_function_name(var_one, var_two,
        var_three, var_four)
    
    # Further indentation required as indentation is not distinguishable.
    def long_function_name(
        var_one, var_two, var_three,
        var_four):
        print(var_one)
    
    1

  • Các mục nhập luôn được đặt ở đầu tệp, ngay sau bất kỳ nhận xét và chuỗi tài liệu nào của mô-đun cũng như trước các hằng số và toàn cầu của mô-đun

    Nhập khẩu nên được nhóm lại theo thứ tự sau

    1. Nhập thư viện tiêu chuẩn
    2. Nhập khẩu của bên thứ ba có liên quan
    3. Nhập ứng dụng cục bộ/thư viện cụ thể

    Bạn nên đặt một dòng trống giữa mỗi nhóm nhập khẩu

  • Nhập tuyệt đối được khuyến nghị, vì chúng thường dễ đọc hơn và có xu hướng hoạt động tốt hơn (hoặc ít nhất là đưa ra thông báo lỗi tốt hơn) nếu hệ thống nhập được định cấu hình không chính xác (chẳng hạn như khi thư mục bên trong gói kết thúc vào ngày
    # Wrong:
    
    # Arguments on first line forbidden when not using vertical alignment.
    foo = long_function_name(var_one, var_two,
        var_three, var_four)
    
    # Further indentation required as indentation is not distinguishable.
    def long_function_name(
        var_one, var_two, var_three,
        var_four):
        print(var_one)
    
    04)

    # Wrong:
    
    # Arguments on first line forbidden when not using vertical alignment.
    foo = long_function_name(var_one, var_two,
        var_three, var_four)
    
    # Further indentation required as indentation is not distinguishable.
    def long_function_name(
        var_one, var_two, var_three,
        var_four):
        print(var_one)
    
    2

    Tuy nhiên, nhập khẩu tương đối rõ ràng là một giải pháp thay thế có thể chấp nhận được đối với nhập khẩu tuyệt đối, đặc biệt là khi xử lý các bố cục gói phức tạp khi sử dụng nhập khẩu tuyệt đối sẽ dài dòng không cần thiết

    # Wrong:
    
    # Arguments on first line forbidden when not using vertical alignment.
    foo = long_function_name(var_one, var_two,
        var_three, var_four)
    
    # Further indentation required as indentation is not distinguishable.
    def long_function_name(
        var_one, var_two, var_three,
        var_four):
        print(var_one)
    
    3

    Mã thư viện chuẩn nên tránh bố cục gói phức tạp và luôn sử dụng nhập khẩu tuyệt đối

  • Khi nhập một lớp từ một mô-đun chứa lớp, bạn thường đánh vần từ này

    # Wrong:
    
    # Arguments on first line forbidden when not using vertical alignment.
    foo = long_function_name(var_one, var_two,
        var_three, var_four)
    
    # Further indentation required as indentation is not distinguishable.
    def long_function_name(
        var_one, var_two, var_three,
        var_four):
        print(var_one)
    
    4

    Nếu cách đánh vần này gây ra xung đột tên địa phương, thì hãy đánh vần chúng một cách rõ ràng

    # Wrong:
    
    # Arguments on first line forbidden when not using vertical alignment.
    foo = long_function_name(var_one, var_two,
        var_three, var_four)
    
    # Further indentation required as indentation is not distinguishable.
    def long_function_name(
        var_one, var_two, var_three,
        var_four):
        print(var_one)
    
    5

    và sử dụng “myclass. MyClass” và “foo. quán ba. lớp của bạn. Lớp của bạn"

  • Nên tránh nhập ký tự đại diện (
    # Wrong:
    
    # Arguments on first line forbidden when not using vertical alignment.
    foo = long_function_name(var_one, var_two,
        var_three, var_four)
    
    # Further indentation required as indentation is not distinguishable.
    def long_function_name(
        var_one, var_two, var_three,
        var_four):
        print(var_one)
    
    05), vì chúng làm cho không rõ tên nào có trong không gian tên, gây nhầm lẫn cho cả người đọc và nhiều công cụ tự động. Có một trường hợp sử dụng có thể bảo vệ được đối với nhập ký tự đại diện, đó là xuất bản lại giao diện nội bộ như một phần của API công khai (ví dụ: ghi đè triển khai Python thuần túy của giao diện bằng các định nghĩa từ mô-đun tăng tốc tùy chọn và chính xác định nghĩa nào sẽ được

    Khi xuất bản lại tên theo cách này, các nguyên tắc bên dưới về giao diện công khai và nội bộ vẫn được áp dụng

Tên Dunder cấp độ mô-đun

Cấp độ mô-đun “dunders” (i. e. tên có hai dấu gạch dưới ở đầu và hai ở cuối) chẳng hạn như

# Wrong:

# Arguments on first line forbidden when not using vertical alignment.
foo = long_function_name(var_one, var_two,
    var_three, var_four)

# Further indentation required as indentation is not distinguishable.
def long_function_name(
    var_one, var_two, var_three,
    var_four):
    print(var_one)
06,
# Wrong:

# Arguments on first line forbidden when not using vertical alignment.
foo = long_function_name(var_one, var_two,
    var_three, var_four)

# Further indentation required as indentation is not distinguishable.
def long_function_name(
    var_one, var_two, var_three,
    var_four):
    print(var_one)
07,
# Wrong:

# Arguments on first line forbidden when not using vertical alignment.
foo = long_function_name(var_one, var_two,
    var_three, var_four)

# Further indentation required as indentation is not distinguishable.
def long_function_name(
    var_one, var_two, var_three,
    var_four):
    print(var_one)
08, v.v. nên được đặt sau chuỗi tài liệu mô-đun nhưng trước bất kỳ câu lệnh nhập nào ngoại trừ nhập khẩu
# Wrong:

# Arguments on first line forbidden when not using vertical alignment.
foo = long_function_name(var_one, var_two,
    var_three, var_four)

# Further indentation required as indentation is not distinguishable.
def long_function_name(
    var_one, var_two, var_three,
    var_four):
    print(var_one)
09. Python yêu cầu các lần nhập trong tương lai phải xuất hiện trong mô-đun trước bất kỳ mã nào khác ngoại trừ chuỗi tài liệu

# Wrong:

# Arguments on first line forbidden when not using vertical alignment.
foo = long_function_name(var_one, var_two,
    var_three, var_four)

# Further indentation required as indentation is not distinguishable.
def long_function_name(
    var_one, var_two, var_three,
    var_four):
    print(var_one)
6

Chuỗi trích dẫn

Trong Python, chuỗi trích dẫn đơn và chuỗi trích dẫn kép giống nhau. PEP này không đưa ra khuyến nghị cho việc này. Chọn một quy tắc và tuân theo nó. Tuy nhiên, khi một chuỗi chứa các ký tự trích dẫn đơn hoặc kép, hãy sử dụng ký tự còn lại để tránh dấu gạch chéo ngược trong chuỗi. Nó cải thiện khả năng đọc

Đối với chuỗi trích dẫn ba lần, luôn sử dụng ký tự trích dẫn kép để phù hợp với quy ước chuỗi tài liệu trong PEP 257

Khoảng trắng trong biểu thức và câu lệnh

Thói xấu

Tránh khoảng trắng không liên quan trong các trường hợp sau

  • Ngay bên trong dấu ngoặc đơn, dấu ngoặc hoặc dấu ngoặc nhọn

    # Wrong:
    
    # Arguments on first line forbidden when not using vertical alignment.
    foo = long_function_name(var_one, var_two,
        var_three, var_four)
    
    # Further indentation required as indentation is not distinguishable.
    def long_function_name(
        var_one, var_two, var_three,
        var_four):
        print(var_one)
    
    7

    # Wrong:
    
    # Arguments on first line forbidden when not using vertical alignment.
    foo = long_function_name(var_one, var_two,
        var_three, var_four)
    
    # Further indentation required as indentation is not distinguishable.
    def long_function_name(
        var_one, var_two, var_three,
        var_four):
        print(var_one)
    
    8

  • Giữa dấu phẩy ở cuối và dấu ngoặc đơn theo sau

    # Wrong:
    
    # Arguments on first line forbidden when not using vertical alignment.
    foo = long_function_name(var_one, var_two,
        var_three, var_four)
    
    # Further indentation required as indentation is not distinguishable.
    def long_function_name(
        var_one, var_two, var_three,
        var_four):
        print(var_one)
    
    9

    # Hanging indents *may* be indented to other than 4 spaces.
    foo = long_function_name(
      var_one, var_two,
      var_three, var_four)
    
    0

  • Ngay trước dấu phẩy, dấu chấm phẩy hoặc dấu hai chấm

    # Hanging indents *may* be indented to other than 4 spaces.
    foo = long_function_name(
      var_one, var_two,
      var_three, var_four)
    
    1

    # Hanging indents *may* be indented to other than 4 spaces.
    foo = long_function_name(
      var_one, var_two,
      var_three, var_four)
    
    2

  • Tuy nhiên, trong một lát cắt, dấu hai chấm hoạt động giống như một toán tử nhị phân và phải có số lượng bằng nhau ở hai bên (coi nó là toán tử có mức ưu tiên thấp nhất). Trong một lát cắt mở rộng, cả hai dấu hai chấm phải có cùng khoảng cách được áp dụng. Ngoại lệ. khi một tham số lát bị bỏ qua, khoảng trắng sẽ bị bỏ qua

    # Hanging indents *may* be indented to other than 4 spaces.
    foo = long_function_name(
      var_one, var_two,
      var_three, var_four)
    
    3

    # Hanging indents *may* be indented to other than 4 spaces.
    foo = long_function_name(
      var_one, var_two,
      var_three, var_four)
    
    4

  • Ngay trước dấu ngoặc mở bắt đầu danh sách đối số của lệnh gọi hàm

    # Hanging indents *may* be indented to other than 4 spaces.
    foo = long_function_name(
      var_one, var_two,
      var_three, var_four)
    
    5

    # Hanging indents *may* be indented to other than 4 spaces.
    foo = long_function_name(
      var_one, var_two,
      var_three, var_four)
    
    6

  • Ngay trước dấu ngoặc đơn mở bắt đầu lập chỉ mục hoặc cắt

    # Hanging indents *may* be indented to other than 4 spaces.
    foo = long_function_name(
      var_one, var_two,
      var_three, var_four)
    
    7

    # Hanging indents *may* be indented to other than 4 spaces.
    foo = long_function_name(
      var_one, var_two,
      var_three, var_four)
    
    8

  • Nhiều khoảng trống xung quanh một toán tử gán (hoặc khác) để căn chỉnh nó với một toán tử khác

    # Hanging indents *may* be indented to other than 4 spaces.
    foo = long_function_name(
      var_one, var_two,
      var_three, var_four)
    
    9

    # No extra indentation.
    if (this_is_one_thing and
        that_is_another_thing):
        do_something()
    
    # Add a comment, which will provide some distinction in editors
    # supporting syntax highlighting.
    if (this_is_one_thing and
        that_is_another_thing):
        # Since both conditions are true, we can frobnicate.
        do_something()
    
    # Add some extra indentation on the conditional continuation line.
    if (this_is_one_thing
            and that_is_another_thing):
        do_something()
    
    0

Khuyến nghị khác

  • Tránh dấu khoảng trắng ở bất cứ đâu. Bởi vì nó thường vô hình nên có thể gây nhầm lẫn. e. g. dấu gạch chéo ngược theo sau là khoảng trắng và một dòng mới không được tính là điểm đánh dấu tiếp tục dòng. Một số trình soạn thảo không bảo quản nó và nhiều dự án (như bản thân CPython) có pre-commit hook từ chối nó
  • Luôn bao quanh các toán tử nhị phân này bằng một khoảng trắng ở hai bên. bài tập (
    # Wrong:
    
    # Arguments on first line forbidden when not using vertical alignment.
    foo = long_function_name(var_one, var_two,
        var_three, var_four)
    
    # Further indentation required as indentation is not distinguishable.
    def long_function_name(
        var_one, var_two, var_three,
        var_four):
        print(var_one)
    
    60), bài tập tăng cường (
    # Wrong:
    
    # Arguments on first line forbidden when not using vertical alignment.
    foo = long_function_name(var_one, var_two,
        var_three, var_four)
    
    # Further indentation required as indentation is not distinguishable.
    def long_function_name(
        var_one, var_two, var_three,
        var_four):
        print(var_one)
    
    61,
    # Wrong:
    
    # Arguments on first line forbidden when not using vertical alignment.
    foo = long_function_name(var_one, var_two,
        var_three, var_four)
    
    # Further indentation required as indentation is not distinguishable.
    def long_function_name(
        var_one, var_two, var_three,
        var_four):
        print(var_one)
    
    62, v.v. ), so sánh (
    # Wrong:
    
    # Arguments on first line forbidden when not using vertical alignment.
    foo = long_function_name(var_one, var_two,
        var_three, var_four)
    
    # Further indentation required as indentation is not distinguishable.
    def long_function_name(
        var_one, var_two, var_three,
        var_four):
        print(var_one)
    
    63,
    # Wrong:
    
    # Arguments on first line forbidden when not using vertical alignment.
    foo = long_function_name(var_one, var_two,
        var_three, var_four)
    
    # Further indentation required as indentation is not distinguishable.
    def long_function_name(
        var_one, var_two, var_three,
        var_four):
        print(var_one)
    
    64,
    # Wrong:
    
    # Arguments on first line forbidden when not using vertical alignment.
    foo = long_function_name(var_one, var_two,
        var_three, var_four)
    
    # Further indentation required as indentation is not distinguishable.
    def long_function_name(
        var_one, var_two, var_three,
        var_four):
        print(var_one)
    
    65,
    # Wrong:
    
    # Arguments on first line forbidden when not using vertical alignment.
    foo = long_function_name(var_one, var_two,
        var_three, var_four)
    
    # Further indentation required as indentation is not distinguishable.
    def long_function_name(
        var_one, var_two, var_three,
        var_four):
        print(var_one)
    
    66,
    # Wrong:
    
    # Arguments on first line forbidden when not using vertical alignment.
    foo = long_function_name(var_one, var_two,
        var_three, var_four)
    
    # Further indentation required as indentation is not distinguishable.
    def long_function_name(
        var_one, var_two, var_three,
        var_four):
        print(var_one)
    
    67,
    # Wrong:
    
    # Arguments on first line forbidden when not using vertical alignment.
    foo = long_function_name(var_one, var_two,
        var_three, var_four)
    
    # Further indentation required as indentation is not distinguishable.
    def long_function_name(
        var_one, var_two, var_three,
        var_four):
        print(var_one)
    
    68,
    # Wrong:
    
    # Arguments on first line forbidden when not using vertical alignment.
    foo = long_function_name(var_one, var_two,
        var_three, var_four)
    
    # Further indentation required as indentation is not distinguishable.
    def long_function_name(
        var_one, var_two, var_three,
        var_four):
        print(var_one)
    
    69,
    # Wrong:
    
    # Arguments on first line forbidden when not using vertical alignment.
    foo = long_function_name(var_one, var_two,
        var_three, var_four)
    
    # Further indentation required as indentation is not distinguishable.
    def long_function_name(
        var_one, var_two, var_three,
        var_four):
        print(var_one)
    
    00,
    # Wrong:
    
    # Arguments on first line forbidden when not using vertical alignment.
    foo = long_function_name(var_one, var_two,
        var_three, var_four)
    
    # Further indentation required as indentation is not distinguishable.
    def long_function_name(
        var_one, var_two, var_three,
        var_four):
        print(var_one)
    
    01,
    # Wrong:
    
    # Arguments on first line forbidden when not using vertical alignment.
    foo = long_function_name(var_one, var_two,
        var_three, var_four)
    
    # Further indentation required as indentation is not distinguishable.
    def long_function_name(
        var_one, var_two, var_three,
        var_four):
        print(var_one)
    
    02,
    # Wrong:
    
    # Arguments on first line forbidden when not using vertical alignment.
    foo = long_function_name(var_one, var_two,
        var_three, var_four)
    
    # Further indentation required as indentation is not distinguishable.
    def long_function_name(
        var_one, var_two, var_three,
        var_four):
        print(var_one)
    
    03), Booleans (
    # Wrong:
    
    # Arguments on first line forbidden when not using vertical alignment.
    foo = long_function_name(var_one, var_two,
        var_three, var_four)
    
    # Further indentation required as indentation is not distinguishable.
    def long_function_name(
        var_one, var_two, var_three,
        var_four):
        print(var_one)
    
    04,
    # Wrong:
    
    # Arguments on first line forbidden when not using vertical alignment.
    foo = long_function_name(var_one, var_two,
        var_three, var_four)
    
    # Further indentation required as indentation is not distinguishable.
    def long_function_name(
        var_one, var_two, var_three,
        var_four):
        print(var_one)
    
    05,
    # Wrong:
    
    # Arguments on first line forbidden when not using vertical alignment.
    foo = long_function_name(var_one, var_two,
        var_three, var_four)
    
    # Further indentation required as indentation is not distinguishable.
    def long_function_name(
        var_one, var_two, var_three,
        var_four):
        print(var_one)
    
    06)
  • Nếu các toán tử có mức độ ưu tiên khác nhau được sử dụng, hãy xem xét thêm khoảng trắng xung quanh các toán tử có (các) mức độ ưu tiên thấp nhất. Sử dụng phán đoán của riêng bạn;

    # No extra indentation.
    if (this_is_one_thing and
        that_is_another_thing):
        do_something()
    
    # Add a comment, which will provide some distinction in editors
    # supporting syntax highlighting.
    if (this_is_one_thing and
        that_is_another_thing):
        # Since both conditions are true, we can frobnicate.
        do_something()
    
    # Add some extra indentation on the conditional continuation line.
    if (this_is_one_thing
            and that_is_another_thing):
        do_something()
    
    1

    # No extra indentation.
    if (this_is_one_thing and
        that_is_another_thing):
        do_something()
    
    # Add a comment, which will provide some distinction in editors
    # supporting syntax highlighting.
    if (this_is_one_thing and
        that_is_another_thing):
        # Since both conditions are true, we can frobnicate.
        do_something()
    
    # Add some extra indentation on the conditional continuation line.
    if (this_is_one_thing
            and that_is_another_thing):
        do_something()
    
    2

  • Chú thích chức năng nên sử dụng các quy tắc bình thường cho dấu hai chấm và luôn có khoảng trắng xung quanh mũi tên
    # Wrong:
    
    # Arguments on first line forbidden when not using vertical alignment.
    foo = long_function_name(var_one, var_two,
        var_three, var_four)
    
    # Further indentation required as indentation is not distinguishable.
    def long_function_name(
        var_one, var_two, var_three,
        var_four):
        print(var_one)
    
    07 nếu có. (Xem Chú thích chức năng bên dưới để biết thêm về chú thích chức năng. )

    # No extra indentation.
    if (this_is_one_thing and
        that_is_another_thing):
        do_something()
    
    # Add a comment, which will provide some distinction in editors
    # supporting syntax highlighting.
    if (this_is_one_thing and
        that_is_another_thing):
        # Since both conditions are true, we can frobnicate.
        do_something()
    
    # Add some extra indentation on the conditional continuation line.
    if (this_is_one_thing
            and that_is_another_thing):
        do_something()
    
    3

    # No extra indentation.
    if (this_is_one_thing and
        that_is_another_thing):
        do_something()
    
    # Add a comment, which will provide some distinction in editors
    # supporting syntax highlighting.
    if (this_is_one_thing and
        that_is_another_thing):
        # Since both conditions are true, we can frobnicate.
        do_something()
    
    # Add some extra indentation on the conditional continuation line.
    if (this_is_one_thing
            and that_is_another_thing):
        do_something()
    
    4

  • Không sử dụng khoảng trắng xung quanh ký hiệu
    # Wrong:
    
    # Arguments on first line forbidden when not using vertical alignment.
    foo = long_function_name(var_one, var_two,
        var_three, var_four)
    
    # Further indentation required as indentation is not distinguishable.
    def long_function_name(
        var_one, var_two, var_three,
        var_four):
        print(var_one)
    
    60 khi được sử dụng để biểu thị đối số từ khóa hoặc khi được sử dụng để biểu thị giá trị mặc định cho tham số chức năng không được chú thích

    # No extra indentation.
    if (this_is_one_thing and
        that_is_another_thing):
        do_something()
    
    # Add a comment, which will provide some distinction in editors
    # supporting syntax highlighting.
    if (this_is_one_thing and
        that_is_another_thing):
        # Since both conditions are true, we can frobnicate.
        do_something()
    
    # Add some extra indentation on the conditional continuation line.
    if (this_is_one_thing
            and that_is_another_thing):
        do_something()
    
    5

    # No extra indentation.
    if (this_is_one_thing and
        that_is_another_thing):
        do_something()
    
    # Add a comment, which will provide some distinction in editors
    # supporting syntax highlighting.
    if (this_is_one_thing and
        that_is_another_thing):
        # Since both conditions are true, we can frobnicate.
        do_something()
    
    # Add some extra indentation on the conditional continuation line.
    if (this_is_one_thing
            and that_is_another_thing):
        do_something()
    
    6

    Tuy nhiên, khi kết hợp một chú thích đối số với một giá trị mặc định, hãy sử dụng khoảng trắng xung quanh ký hiệu

    # Wrong:
    
    # Arguments on first line forbidden when not using vertical alignment.
    foo = long_function_name(var_one, var_two,
        var_three, var_four)
    
    # Further indentation required as indentation is not distinguishable.
    def long_function_name(
        var_one, var_two, var_three,
        var_four):
        print(var_one)
    
    60

    # No extra indentation.
    if (this_is_one_thing and
        that_is_another_thing):
        do_something()
    
    # Add a comment, which will provide some distinction in editors
    # supporting syntax highlighting.
    if (this_is_one_thing and
        that_is_another_thing):
        # Since both conditions are true, we can frobnicate.
        do_something()
    
    # Add some extra indentation on the conditional continuation line.
    if (this_is_one_thing
            and that_is_another_thing):
        do_something()
    
    7

    # No extra indentation.
    if (this_is_one_thing and
        that_is_another_thing):
        do_something()
    
    # Add a comment, which will provide some distinction in editors
    # supporting syntax highlighting.
    if (this_is_one_thing and
        that_is_another_thing):
        # Since both conditions are true, we can frobnicate.
        do_something()
    
    # Add some extra indentation on the conditional continuation line.
    if (this_is_one_thing
            and that_is_another_thing):
        do_something()
    
    8

  • Câu lệnh ghép (nhiều câu lệnh trên cùng một dòng) thường không được khuyến khích

    # No extra indentation.
    if (this_is_one_thing and
        that_is_another_thing):
        do_something()
    
    # Add a comment, which will provide some distinction in editors
    # supporting syntax highlighting.
    if (this_is_one_thing and
        that_is_another_thing):
        # Since both conditions are true, we can frobnicate.
        do_something()
    
    # Add some extra indentation on the conditional continuation line.
    if (this_is_one_thing
            and that_is_another_thing):
        do_something()
    
    9

    đúng hơn là không

    my_list = [
        1, 2, 3,
        4, 5, 6,
        ]
    result = some_function_that_takes_arguments(
        'a', 'b', 'c',
        'd', 'e', 'f',
        )
    
    0

  • Mặc dù đôi khi bạn có thể đặt if/for/while với phần thân nhỏ trên cùng một dòng, nhưng đừng bao giờ làm điều này đối với các câu có nhiều mệnh đề. Cũng tránh gấp những hàng dài như vậy

    đúng hơn là không

    my_list = [
        1, 2, 3,
        4, 5, 6,
        ]
    result = some_function_that_takes_arguments(
        'a', 'b', 'c',
        'd', 'e', 'f',
        )
    
    1

    Chắc chắn không phải

    my_list = [
        1, 2, 3,
        4, 5, 6,
        ]
    result = some_function_that_takes_arguments(
        'a', 'b', 'c',
        'd', 'e', 'f',
        )
    
    2

Khi nào nên sử dụng dấu phẩy ở cuối

Dấu phẩy ở cuối thường là tùy chọn, ngoại trừ chúng là bắt buộc khi tạo một bộ gồm một phần tử. Để rõ ràng, nên đặt phần sau trong dấu ngoặc đơn (dư thừa về mặt kỹ thuật)

my_list = [
    1, 2, 3,
    4, 5, 6,
    ]
result = some_function_that_takes_arguments(
    'a', 'b', 'c',
    'd', 'e', 'f',
    )
3

my_list = [
    1, 2, 3,
    4, 5, 6,
    ]
result = some_function_that_takes_arguments(
    'a', 'b', 'c',
    'd', 'e', 'f',
    )
4

Khi dấu phẩy ở cuối là dư thừa, chúng thường hữu ích khi hệ thống kiểm soát phiên bản được sử dụng, khi danh sách giá trị, đối số hoặc mục đã nhập dự kiến ​​sẽ được mở rộng theo thời gian. Mẫu là đặt từng giá trị (v.v. ) trên một dòng, luôn thêm dấu phẩy ở cuối và thêm dấu ngoặc đơn/dấu ngoặc nhọn/dấu ngoặc nhọn trên dòng tiếp theo. Tuy nhiên, sẽ không có ý nghĩa gì khi có dấu phẩy ở cuối trên cùng một dòng với dấu phân cách đóng (ngoại trừ trường hợp trên của các bộ dữ liệu đơn lẻ)

my_list = [
    1, 2, 3,
    4, 5, 6,
    ]
result = some_function_that_takes_arguments(
    'a', 'b', 'c',
    'd', 'e', 'f',
    )
5

my_list = [
    1, 2, 3,
    4, 5, 6,
    ]
result = some_function_that_takes_arguments(
    'a', 'b', 'c',
    'd', 'e', 'f',
    )
6

Bình luận

Bình luận mâu thuẫn với mã còn tệ hơn là không có bình luận. Luôn ưu tiên cập nhật các nhận xét khi mã thay đổi

Nhận xét phải là câu hoàn chỉnh. Từ đầu tiên phải được viết hoa, trừ khi đó là từ định danh bắt đầu bằng chữ cái viết thường (không bao giờ thay đổi trường hợp định danh. )

Bình luận khối thường bao gồm một hoặc nhiều đoạn văn được xây dựng từ các câu hoàn chỉnh, với mỗi câu kết thúc bằng một dấu chấm

Bạn nên sử dụng hai khoảng trắng sau khoảng thời gian kết thúc câu trong các nhận xét nhiều câu, ngoại trừ sau câu cuối cùng

Đảm bảo rằng nhận xét của bạn rõ ràng và dễ hiểu đối với những người nói ngôn ngữ khác mà bạn đang viết

Lập trình viên Python từ các quốc gia không nói tiếng Anh. vui lòng viết nhận xét của bạn bằng tiếng Anh, trừ khi bạn chắc chắn 120% rằng mã sẽ không bao giờ được đọc bởi những người không nói ngôn ngữ của bạn

chặn bình luận

Chặn nhận xét thường áp dụng cho một số (hoặc tất cả) mã theo sau chúng và được thụt vào cùng cấp độ với mã đó. Mỗi dòng của một bình luận khối bắt đầu bằng một

# Wrong:

# Arguments on first line forbidden when not using vertical alignment.
foo = long_function_name(var_one, var_two,
    var_three, var_four)

# Further indentation required as indentation is not distinguishable.
def long_function_name(
    var_one, var_two, var_three,
    var_four):
    print(var_one)
10 và một khoảng trắng (trừ khi đó là văn bản thụt vào bên trong bình luận)

Các đoạn bên trong một chú thích khối được phân tách bằng một dòng chứa một

# Wrong:

# Arguments on first line forbidden when not using vertical alignment.
foo = long_function_name(var_one, var_two,
    var_three, var_four)

# Further indentation required as indentation is not distinguishable.
def long_function_name(
    var_one, var_two, var_three,
    var_four):
    print(var_one)
10

Nhận xét nội tuyến

Sử dụng bình luận nội tuyến một cách tiết kiệm

Một bình luận nội tuyến là một bình luận trên cùng một dòng với một tuyên bố. Nhận xét nội tuyến phải được phân tách bằng ít nhất hai dấu cách từ câu lệnh. Họ nên bắt đầu bằng một dấu # và một dấu cách

Nhận xét nội tuyến là không cần thiết và trên thực tế gây mất tập trung nếu chúng nêu rõ ràng. Đừng làm điều này

my_list = [
    1, 2, 3,
    4, 5, 6,
    ]
result = some_function_that_takes_arguments(
    'a', 'b', 'c',
    'd', 'e', 'f',
    )
7

Nhưng đôi khi, điều này là hữu ích

my_list = [
    1, 2, 3,
    4, 5, 6,
    ]
result = some_function_that_takes_arguments(
    'a', 'b', 'c',
    'd', 'e', 'f',
    )
8

Chuỗi tài liệu

Các quy ước để viết các chuỗi tài liệu tốt (a. k. a. “docstrings”) bất tử trong PEP 257

  • Viết tài liệu cho tất cả các mô-đun, hàm, lớp và phương thức công khai. Các tài liệu không cần thiết cho các phương thức không công khai, nhưng bạn nên có một nhận xét mô tả chức năng của phương thức đó. Nhận xét này sẽ xuất hiện sau dòng
    # Wrong:
    
    # Arguments on first line forbidden when not using vertical alignment.
    foo = long_function_name(var_one, var_two,
        var_three, var_four)
    
    # Further indentation required as indentation is not distinguishable.
    def long_function_name(
        var_one, var_two, var_three,
        var_four):
        print(var_one)
    
    12
  • PEP 257 mô tả các quy ước chuỗi tài liệu tốt. Lưu ý rằng quan trọng nhất,
    # Wrong:
    
    # Arguments on first line forbidden when not using vertical alignment.
    foo = long_function_name(var_one, var_two,
        var_three, var_four)
    
    # Further indentation required as indentation is not distinguishable.
    def long_function_name(
        var_one, var_two, var_three,
        var_four):
        print(var_one)
    
    13 kết thúc một chuỗi tài liệu nhiều dòng phải nằm trên một dòng của chính nó

    my_list = [
        1, 2, 3,
        4, 5, 6,
        ]
    result = some_function_that_takes_arguments(
        'a', 'b', 'c',
        'd', 'e', 'f',
        )
    
    9

  • Đối với một chuỗi tài liệu lót, vui lòng giữ
    # Wrong:
    
    # Arguments on first line forbidden when not using vertical alignment.
    foo = long_function_name(var_one, var_two,
        var_three, var_four)
    
    # Further indentation required as indentation is not distinguishable.
    def long_function_name(
        var_one, var_two, var_three,
        var_four):
        print(var_one)
    
    13 đóng trên cùng một dòng

    my_list = [
        1, 2, 3,
        4, 5, 6,
    ]
    result = some_function_that_takes_arguments(
        'a', 'b', 'c',
        'd', 'e', 'f',
    )
    
    0

quy ước đặt tên

Các quy ước đặt tên của thư viện Python hơi lộn xộn, vì vậy chúng tôi sẽ không bao giờ hiểu được điều này hoàn toàn nhất quán – tuy nhiên, đây là các tiêu chuẩn đặt tên hiện được khuyến nghị. Các mô-đun và gói mới (bao gồm cả khung của bên thứ ba) nên được viết theo các tiêu chuẩn này, nhưng khi một thư viện hiện có có kiểu khác, thì nên ưu tiên tính nhất quán nội bộ

Nguyên tắc ghi đè

Các tên hiển thị cho người dùng dưới dạng các phần công khai của API phải tuân theo các quy ước phản ánh cách sử dụng thay vì triển khai

mô tả. Phong cách đặt tên

Có rất nhiều cách đặt tên khác nhau. Nó giúp có thể nhận ra phong cách đặt tên nào đang được sử dụng, độc lập với những gì chúng được sử dụng cho

Các kiểu đặt tên sau đây thường được phân biệt

  • # Wrong:
    
    # Arguments on first line forbidden when not using vertical alignment.
    foo = long_function_name(var_one, var_two,
        var_three, var_four)
    
    # Further indentation required as indentation is not distinguishable.
    def long_function_name(
        var_one, var_two, var_three,
        var_four):
        print(var_one)
    
    15 (một chữ thường)
  • # Wrong:
    
    # Arguments on first line forbidden when not using vertical alignment.
    foo = long_function_name(var_one, var_two,
        var_three, var_four)
    
    # Further indentation required as indentation is not distinguishable.
    def long_function_name(
        var_one, var_two, var_three,
        var_four):
        print(var_one)
    
    16 (chữ in hoa đơn)
  • # Wrong:
    
    # Arguments on first line forbidden when not using vertical alignment.
    foo = long_function_name(var_one, var_two,
        var_three, var_four)
    
    # Further indentation required as indentation is not distinguishable.
    def long_function_name(
        var_one, var_two, var_three,
        var_four):
        print(var_one)
    
    17
  • # Wrong:
    
    # Arguments on first line forbidden when not using vertical alignment.
    foo = long_function_name(var_one, var_two,
        var_three, var_four)
    
    # Further indentation required as indentation is not distinguishable.
    def long_function_name(
        var_one, var_two, var_three,
        var_four):
        print(var_one)
    
    18
  • # Wrong:
    
    # Arguments on first line forbidden when not using vertical alignment.
    foo = long_function_name(var_one, var_two,
        var_three, var_four)
    
    # Further indentation required as indentation is not distinguishable.
    def long_function_name(
        var_one, var_two, var_three,
        var_four):
        print(var_one)
    
    19
  • # Wrong:
    
    # Arguments on first line forbidden when not using vertical alignment.
    foo = long_function_name(var_one, var_two,
        var_three, var_four)
    
    # Further indentation required as indentation is not distinguishable.
    def long_function_name(
        var_one, var_two, var_three,
        var_four):
        print(var_one)
    
    20
  • # Wrong:
    
    # Arguments on first line forbidden when not using vertical alignment.
    foo = long_function_name(var_one, var_two,
        var_three, var_four)
    
    # Further indentation required as indentation is not distinguishable.
    def long_function_name(
        var_one, var_two, var_three,
        var_four):
        print(var_one)
    
    21 (hoặc CapWords, hoặc CamelCase – được đặt tên như vậy vì hình dạng gập ghềnh của các chữ cái [4]). Điều này đôi khi còn được gọi là StudlyCaps

    Ghi chú. Khi sử dụng các từ viết tắt trong CapWords, hãy viết hoa tất cả các chữ cái của từ viết tắt. Do đó, HTTPServerError tốt hơn HttpServerError

  • # Wrong:
    
    # Arguments on first line forbidden when not using vertical alignment.
    foo = long_function_name(var_one, var_two,
        var_three, var_four)
    
    # Further indentation required as indentation is not distinguishable.
    def long_function_name(
        var_one, var_two, var_three,
        var_four):
        print(var_one)
    
    22 (khác với Từ viết hoa bởi ký tự chữ thường đầu tiên. )
  • # Wrong:
    
    # Arguments on first line forbidden when not using vertical alignment.
    foo = long_function_name(var_one, var_two,
        var_three, var_four)
    
    # Further indentation required as indentation is not distinguishable.
    def long_function_name(
        var_one, var_two, var_three,
        var_four):
        print(var_one)
    
    23 (xấu xí. )

Ngoài ra còn có kiểu sử dụng tiền tố ngắn duy nhất để nhóm các tên có liên quan lại với nhau. Điều này không được sử dụng nhiều trong Python, nhưng nó được đề cập cho đầy đủ. Ví dụ: hàm

# Wrong:

# Arguments on first line forbidden when not using vertical alignment.
foo = long_function_name(var_one, var_two,
    var_three, var_four)

# Further indentation required as indentation is not distinguishable.
def long_function_name(
    var_one, var_two, var_three,
    var_four):
    print(var_one)
24 trả về một bộ có các mục theo truyền thống có tên như
# Wrong:

# Arguments on first line forbidden when not using vertical alignment.
foo = long_function_name(var_one, var_two,
    var_three, var_four)

# Further indentation required as indentation is not distinguishable.
def long_function_name(
    var_one, var_two, var_three,
    var_four):
    print(var_one)
25,
# Wrong:

# Arguments on first line forbidden when not using vertical alignment.
foo = long_function_name(var_one, var_two,
    var_three, var_four)

# Further indentation required as indentation is not distinguishable.
def long_function_name(
    var_one, var_two, var_three,
    var_four):
    print(var_one)
26,
# Wrong:

# Arguments on first line forbidden when not using vertical alignment.
foo = long_function_name(var_one, var_two,
    var_three, var_four)

# Further indentation required as indentation is not distinguishable.
def long_function_name(
    var_one, var_two, var_three,
    var_four):
    print(var_one)
27, v.v. (Điều này được thực hiện để nhấn mạnh sự tương ứng với các trường của cấu trúc lệnh gọi hệ thống POSIX, giúp người lập trình làm quen với điều đó. )

Thư viện X11 sử dụng chữ X đứng đầu cho tất cả các chức năng công khai của nó. Trong Python, kiểu này thường được coi là không cần thiết vì tên thuộc tính và phương thức được thêm tiền tố vào đối tượng và tên hàm được thêm tiền tố vào tên mô-đun

Ngoài ra, các biểu mẫu đặc biệt sau sử dụng dấu gạch dưới ở đầu hoặc ở cuối được công nhận (những biểu mẫu này thường có thể được kết hợp với bất kỳ quy ước trường hợp nào)

  • # Wrong:
    
    # Arguments on first line forbidden when not using vertical alignment.
    foo = long_function_name(var_one, var_two,
        var_three, var_four)
    
    # Further indentation required as indentation is not distinguishable.
    def long_function_name(
        var_one, var_two, var_three,
        var_four):
        print(var_one)
    
    28. chỉ số “sử dụng nội bộ” yếu. e. g.
    # Wrong:
    
    # Arguments on first line forbidden when not using vertical alignment.
    foo = long_function_name(var_one, var_two,
        var_three, var_four)
    
    # Further indentation required as indentation is not distinguishable.
    def long_function_name(
        var_one, var_two, var_three,
        var_four):
        print(var_one)
    
    29 không nhập các đối tượng có tên bắt đầu bằng dấu gạch dưới
  • # Wrong:
    
    # Arguments on first line forbidden when not using vertical alignment.
    foo = long_function_name(var_one, var_two,
        var_three, var_four)
    
    # Further indentation required as indentation is not distinguishable.
    def long_function_name(
        var_one, var_two, var_three,
        var_four):
        print(var_one)
    
    30. được sử dụng theo quy ước để tránh xung đột với từ khóa Python, e. g

    my_list = [
        1, 2, 3,
        4, 5, 6,
    ]
    result = some_function_that_takes_arguments(
        'a', 'b', 'c',
        'd', 'e', 'f',
    )
    
    1

  • # Wrong:
    
    # Arguments on first line forbidden when not using vertical alignment.
    foo = long_function_name(var_one, var_two,
        var_three, var_four)
    
    # Further indentation required as indentation is not distinguishable.
    def long_function_name(
        var_one, var_two, var_three,
        var_four):
        print(var_one)
    
    31. khi đặt tên cho một thuộc tính lớp, hãy gọi xáo trộn tên (bên trong lớp FooBar,
    # Wrong:
    
    # Arguments on first line forbidden when not using vertical alignment.
    foo = long_function_name(var_one, var_two,
        var_three, var_four)
    
    # Further indentation required as indentation is not distinguishable.
    def long_function_name(
        var_one, var_two, var_three,
        var_four):
        print(var_one)
    
    32 trở thành
    # Wrong:
    
    # Arguments on first line forbidden when not using vertical alignment.
    foo = long_function_name(var_one, var_two,
        var_three, var_four)
    
    # Further indentation required as indentation is not distinguishable.
    def long_function_name(
        var_one, var_two, var_three,
        var_four):
        print(var_one)
    
    33; xem bên dưới)
  • # Wrong:
    
    # Arguments on first line forbidden when not using vertical alignment.
    foo = long_function_name(var_one, var_two,
        var_three, var_four)
    
    # Further indentation required as indentation is not distinguishable.
    def long_function_name(
        var_one, var_two, var_three,
        var_four):
        print(var_one)
    
    34. Các đối tượng hoặc thuộc tính "ma thuật" sống trong các không gian tên do người dùng kiểm soát. e. g.
    # Wrong:
    
    # Arguments on first line forbidden when not using vertical alignment.
    foo = long_function_name(var_one, var_two,
        var_three, var_four)
    
    # Further indentation required as indentation is not distinguishable.
    def long_function_name(
        var_one, var_two, var_three,
        var_four):
        print(var_one)
    
    35,
    # Wrong:
    
    # Arguments on first line forbidden when not using vertical alignment.
    foo = long_function_name(var_one, var_two,
        var_three, var_four)
    
    # Further indentation required as indentation is not distinguishable.
    def long_function_name(
        var_one, var_two, var_three,
        var_four):
        print(var_one)
    
    36 hoặc
    # Wrong:
    
    # Arguments on first line forbidden when not using vertical alignment.
    foo = long_function_name(var_one, var_two,
        var_three, var_four)
    
    # Further indentation required as indentation is not distinguishable.
    def long_function_name(
        var_one, var_two, var_three,
        var_four):
        print(var_one)
    
    37. Đừng bao giờ phát minh ra những cái tên như vậy;

kê đơn. quy ước đặt tên

Những cái tên cần tránh

Không bao giờ sử dụng các ký tự 'l' (chữ el viết thường), 'O' (chữ oh viết hoa) hoặc 'I' (chữ viết hoa eye) làm tên biến ký tự đơn

Trong một số phông chữ, các ký tự này không thể phân biệt được với các chữ số một và số không. Khi muốn sử dụng 'l', hãy sử dụng 'L' để thay thế

Khả năng tương thích ASCII

Mã định danh được sử dụng trong thư viện tiêu chuẩn phải tương thích với ASCII như được mô tả trong phần chính sách của PEP 3131

Tên gói và mô-đun

Các mô-đun nên có tên ngắn, toàn chữ thường. Dấu gạch dưới có thể được sử dụng trong tên mô-đun nếu nó cải thiện khả năng đọc. Các gói Python cũng phải có tên ngắn, viết thường, mặc dù việc sử dụng dấu gạch dưới không được khuyến khích

Khi một mô-đun mở rộng được viết bằng C hoặc C++ có một mô-đun Python đi kèm cung cấp cấp độ cao hơn (e. g. hướng đối tượng hơn), mô-đun C/C++ có dấu gạch dưới ở đầu (e. g.

# Wrong:

# Arguments on first line forbidden when not using vertical alignment.
foo = long_function_name(var_one, var_two,
    var_three, var_four)

# Further indentation required as indentation is not distinguishable.
def long_function_name(
    var_one, var_two, var_three,
    var_four):
    print(var_one)
38)

Tên Lớp

Tên lớp thường nên sử dụng quy ước CapWords

Quy ước đặt tên cho các chức năng có thể được sử dụng thay thế trong trường hợp giao diện được ghi lại và được sử dụng chủ yếu dưới dạng có thể gọi được

Lưu ý rằng có một quy ước riêng cho tên dựng sẵn. hầu hết các tên dựng sẵn là các từ đơn (hoặc hai từ chạy cùng nhau), với quy ước CapWords chỉ được sử dụng cho các tên ngoại lệ và hằng số dựng sẵn

Nhập tên biến

Tên của các biến loại được giới thiệu trong PEP 484 thường nên sử dụng CapWords ưu tiên tên ngắn.

# Wrong:

# Arguments on first line forbidden when not using vertical alignment.
foo = long_function_name(var_one, var_two,
    var_three, var_four)

# Further indentation required as indentation is not distinguishable.
def long_function_name(
    var_one, var_two, var_three,
    var_four):
    print(var_one)
39,
# Wrong:

# Arguments on first line forbidden when not using vertical alignment.
foo = long_function_name(var_one, var_two,
    var_three, var_four)

# Further indentation required as indentation is not distinguishable.
def long_function_name(
    var_one, var_two, var_three,
    var_four):
    print(var_one)
40,
# Wrong:

# Arguments on first line forbidden when not using vertical alignment.
foo = long_function_name(var_one, var_two,
    var_three, var_four)

# Further indentation required as indentation is not distinguishable.
def long_function_name(
    var_one, var_two, var_three,
    var_four):
    print(var_one)
41. Nên thêm các hậu tố
# Wrong:

# Arguments on first line forbidden when not using vertical alignment.
foo = long_function_name(var_one, var_two,
    var_three, var_four)

# Further indentation required as indentation is not distinguishable.
def long_function_name(
    var_one, var_two, var_three,
    var_four):
    print(var_one)
42 hoặc
# Wrong:

# Arguments on first line forbidden when not using vertical alignment.
foo = long_function_name(var_one, var_two,
    var_three, var_four)

# Further indentation required as indentation is not distinguishable.
def long_function_name(
    var_one, var_two, var_three,
    var_four):
    print(var_one)
43 vào các biến được sử dụng để khai báo hành vi hiệp biến hoặc trái ngược tương ứng

my_list = [
    1, 2, 3,
    4, 5, 6,
]
result = some_function_that_takes_arguments(
    'a', 'b', 'c',
    'd', 'e', 'f',
)
2

Tên ngoại lệ

Vì các ngoại lệ phải là các lớp, quy ước đặt tên lớp được áp dụng ở đây. Tuy nhiên, bạn nên sử dụng hậu tố "Lỗi" trên tên ngoại lệ của mình (nếu ngoại lệ thực sự là lỗi)

Tên biến toàn cầu

(Hãy hy vọng rằng các biến này chỉ được sử dụng bên trong một mô-đun. ) Các quy ước gần giống như các quy ước cho hàm

Các mô-đun được thiết kế để sử dụng qua

# Wrong:

# Arguments on first line forbidden when not using vertical alignment.
foo = long_function_name(var_one, var_two,
    var_three, var_four)

# Further indentation required as indentation is not distinguishable.
def long_function_name(
    var_one, var_two, var_three,
    var_four):
    print(var_one)
29 nên sử dụng cơ chế
# Wrong:

# Arguments on first line forbidden when not using vertical alignment.
foo = long_function_name(var_one, var_two,
    var_three, var_four)

# Further indentation required as indentation is not distinguishable.
def long_function_name(
    var_one, var_two, var_three,
    var_four):
    print(var_one)
06 để ngăn việc xuất các toàn cầu hoặc sử dụng quy ước cũ hơn về việc thêm tiền tố vào các toàn cầu đó bằng dấu gạch dưới (bạn có thể muốn thực hiện điều này để chỉ ra các toàn cầu này là “mô-đun không công khai”)

Tên hàm và biến

Tên chức năng phải là chữ thường, với các từ được phân tách bằng dấu gạch dưới khi cần thiết để cải thiện khả năng đọc

Tên biến tuân theo quy ước giống như tên hàm

mixCase chỉ được phép trong các ngữ cảnh mà đó đã là phong cách phổ biến (e. g. xâu chuỗi. py), để duy trì khả năng tương thích ngược

Đối số hàm và phương thức

Luôn sử dụng

# Wrong:

# Arguments on first line forbidden when not using vertical alignment.
foo = long_function_name(var_one, var_two,
    var_three, var_four)

# Further indentation required as indentation is not distinguishable.
def long_function_name(
    var_one, var_two, var_three,
    var_four):
    print(var_one)
46 cho đối số đầu tiên của các phương thức thể hiện

Luôn sử dụng

# Wrong:

# Arguments on first line forbidden when not using vertical alignment.
foo = long_function_name(var_one, var_two,
    var_three, var_four)

# Further indentation required as indentation is not distinguishable.
def long_function_name(
    var_one, var_two, var_three,
    var_four):
    print(var_one)
47 cho đối số đầu tiên của các phương thức lớp

Nếu tên của đối số hàm xung đột với từ khóa dành riêng, thì tốt hơn hết là nối thêm một dấu gạch dưới ở cuối thay vì sử dụng từ viết tắt hoặc viết sai chính tả. Do đó,

# Wrong:

# Arguments on first line forbidden when not using vertical alignment.
foo = long_function_name(var_one, var_two,
    var_three, var_four)

# Further indentation required as indentation is not distinguishable.
def long_function_name(
    var_one, var_two, var_three,
    var_four):
    print(var_one)
48 tốt hơn
# Wrong:

# Arguments on first line forbidden when not using vertical alignment.
foo = long_function_name(var_one, var_two,
    var_three, var_four)

# Further indentation required as indentation is not distinguishable.
def long_function_name(
    var_one, var_two, var_three,
    var_four):
    print(var_one)
49. (Có lẽ tốt hơn là tránh đụng độ như vậy bằng cách sử dụng từ đồng nghĩa. )

Tên phương thức và biến thể hiện

Sử dụng quy tắc đặt tên hàm. chữ thường với các từ được phân tách bằng dấu gạch dưới khi cần thiết để cải thiện khả năng đọc

Chỉ sử dụng một dấu gạch dưới hàng đầu cho các phương thức không công khai và các biến thể hiện

Để tránh đụng độ tên với các lớp con, hãy sử dụng hai dấu gạch dưới ở đầu để gọi quy tắc xáo trộn tên của Python

Python xáo trộn những tên này với tên lớp. nếu lớp Foo có một thuộc tính có tên là

# Wrong:

# Arguments on first line forbidden when not using vertical alignment.
foo = long_function_name(var_one, var_two,
    var_three, var_four)

# Further indentation required as indentation is not distinguishable.
def long_function_name(
    var_one, var_two, var_three,
    var_four):
    print(var_one)
50, nó không thể được truy cập bởi
# Wrong:

# Arguments on first line forbidden when not using vertical alignment.
foo = long_function_name(var_one, var_two,
    var_three, var_four)

# Further indentation required as indentation is not distinguishable.
def long_function_name(
    var_one, var_two, var_three,
    var_four):
    print(var_one)
51. (Người dùng khăng khăng vẫn có thể truy cập bằng cách gọi
# Wrong:

# Arguments on first line forbidden when not using vertical alignment.
foo = long_function_name(var_one, var_two,
    var_three, var_four)

# Further indentation required as indentation is not distinguishable.
def long_function_name(
    var_one, var_two, var_three,
    var_four):
    print(var_one)
52. ) Nói chung, chỉ nên sử dụng hai dấu gạch dưới ở đầu để tránh xung đột tên với các thuộc tính trong các lớp được thiết kế để phân lớp

Ghi chú. có một số tranh cãi về việc sử dụng __names (xem bên dưới)

hằng số

Các hằng số thường được xác định ở cấp độ mô-đun và được viết bằng tất cả các chữ in hoa với dấu gạch dưới ngăn cách các từ. Ví dụ bao gồm

# Wrong:

# Arguments on first line forbidden when not using vertical alignment.
foo = long_function_name(var_one, var_two,
    var_three, var_four)

# Further indentation required as indentation is not distinguishable.
def long_function_name(
    var_one, var_two, var_three,
    var_four):
    print(var_one)
53 và
# Wrong:

# Arguments on first line forbidden when not using vertical alignment.
foo = long_function_name(var_one, var_two,
    var_three, var_four)

# Further indentation required as indentation is not distinguishable.
def long_function_name(
    var_one, var_two, var_three,
    var_four):
    print(var_one)
54

Thiết kế thừa kế

Luôn quyết định xem các phương thức và biến thể hiện của một lớp (gọi chung là. "thuộc tính") phải ở chế độ công khai hoặc không công khai. Nếu nghi ngờ, hãy chọn không công khai;

Các thuộc tính công khai là những thuộc tính mà bạn muốn các máy khách không liên quan trong lớp của mình sử dụng, với cam kết của bạn để tránh các thay đổi không tương thích ngược. Các thuộc tính không công khai là những thuộc tính không dành cho bên thứ ba sử dụng;

Chúng tôi không sử dụng thuật ngữ “riêng tư” ở đây, vì không có thuộc tính nào thực sự riêng tư trong Python (không có số lượng công việc không cần thiết nói chung)

Một loại thuộc tính khác là những thuộc tính nằm trong “API lớp con” (thường được gọi là “được bảo vệ” trong các ngôn ngữ khác). Một số lớp được thiết kế để được kế thừa từ đó, để mở rộng hoặc sửa đổi các khía cạnh của hành vi của lớp. Khi thiết kế một lớp như vậy, hãy cẩn thận để đưa ra các quyết định rõ ràng về thuộc tính nào là công khai, thuộc tính nào là một phần của API lớp con và thuộc tính nào thực sự chỉ được sử dụng bởi lớp cơ sở của bạn

Với suy nghĩ này, đây là hướng dẫn Pythonic

  • Thuộc tính công cộng không được có dấu gạch dưới ở đầu
  • Nếu tên thuộc tính công khai của bạn xung đột với một từ khóa dành riêng, hãy thêm một dấu gạch dưới vào tên thuộc tính của bạn. Điều này tốt hơn là viết tắt hoặc viết sai chính tả. (Tuy nhiên, bất chấp quy tắc này, 'cls' là cách viết ưa thích cho bất kỳ biến hoặc đối số nào được biết là một lớp, đặc biệt là đối số đầu tiên của một phương thức lớp. )

    lưu ý 1. Xem đề xuất tên đối số ở trên để biết các phương thức lớp

  • Đối với các thuộc tính dữ liệu công khai đơn giản, tốt nhất là chỉ hiển thị tên thuộc tính, không có các phương thức truy cập/biến đổi phức tạp. Hãy nhớ rằng Python cung cấp một con đường dễ dàng để nâng cao trong tương lai, nếu bạn thấy rằng một thuộc tính dữ liệu đơn giản cần phát triển hành vi chức năng. Trong trường hợp đó, hãy sử dụng các thuộc tính để ẩn việc triển khai chức năng đằng sau cú pháp truy cập thuộc tính dữ liệu đơn giản

    lưu ý 1. Cố gắng giữ cho hành vi chức năng không có tác dụng phụ, mặc dù các tác dụng phụ như bộ nhớ đệm nói chung là ổn

    Lưu ý 2. Tránh sử dụng các thuộc tính cho các hoạt động tính toán tốn kém;

  • Nếu lớp của bạn dự định được phân lớp và bạn có các thuộc tính mà bạn không muốn các lớp con sử dụng, hãy cân nhắc đặt tên chúng với hai dấu gạch dưới ở đầu và không có dấu gạch dưới ở cuối. Điều này gọi thuật toán xáo trộn tên của Python, trong đó tên của lớp được xáo trộn thành tên thuộc tính. Điều này giúp tránh xung đột tên thuộc tính nếu các lớp con vô tình chứa các thuộc tính có cùng tên

    lưu ý 1. Lưu ý rằng chỉ tên lớp đơn giản được sử dụng trong tên được đọc sai, vì vậy nếu một lớp con chọn cả tên lớp và tên thuộc tính giống nhau, bạn vẫn có thể bị xung đột tên

    Lưu ý 2. Xáo trộn tên có thể tạo ra một số cách sử dụng nhất định, chẳng hạn như gỡ lỗi và

    # Wrong:
    
    # Arguments on first line forbidden when not using vertical alignment.
    foo = long_function_name(var_one, var_two,
        var_three, var_four)
    
    # Further indentation required as indentation is not distinguishable.
    def long_function_name(
        var_one, var_two, var_three,
        var_four):
        print(var_one)
    
    55, kém thuận tiện hơn. Tuy nhiên, thuật toán xáo trộn tên được ghi chép đầy đủ và dễ dàng thực hiện thủ công

    lưu ý 3. Không phải ai cũng thích xáo trộn tên. Cố gắng cân bằng nhu cầu tránh xung đột tên ngẫu nhiên với khả năng sử dụng của người gọi nâng cao

Giao diện công cộng và nội bộ

Mọi đảm bảo tương thích ngược chỉ áp dụng cho các giao diện công cộng. Theo đó, điều quan trọng là người dùng có thể phân biệt rõ ràng giữa giao diện công cộng và nội bộ

Giao diện tài liệu được coi là công khai, trừ khi tài liệu tuyên bố rõ ràng chúng là giao diện tạm thời hoặc nội bộ được miễn trừ khỏi các đảm bảo tương thích ngược thông thường. Tất cả các giao diện không có giấy tờ nên được coi là nội bộ

Để hỗ trợ tốt hơn cho việc xem xét nội tâm, các mô-đun nên khai báo rõ ràng các tên trong API công khai của chúng bằng thuộc tính

# Wrong:

# Arguments on first line forbidden when not using vertical alignment.
foo = long_function_name(var_one, var_two,
    var_three, var_four)

# Further indentation required as indentation is not distinguishable.
def long_function_name(
    var_one, var_two, var_three,
    var_four):
    print(var_one)
06. Đặt
# Wrong:

# Arguments on first line forbidden when not using vertical alignment.
foo = long_function_name(var_one, var_two,
    var_three, var_four)

# Further indentation required as indentation is not distinguishable.
def long_function_name(
    var_one, var_two, var_three,
    var_four):
    print(var_one)
06 thành danh sách trống cho biết mô-đun không có API công khai

Ngay cả khi đặt _____106 một cách thích hợp, các giao diện bên trong (gói, mô-đun, lớp, hàm, thuộc tính hoặc tên khác) vẫn phải được thêm tiền tố bằng một dấu gạch dưới ở đầu

Một giao diện cũng được coi là nội bộ nếu bất kỳ không gian chứa tên nào (gói, mô-đun hoặc lớp) được coi là nội bộ

Tên đã nhập phải luôn được coi là chi tiết triển khai. Các mô-đun khác không được dựa vào quyền truy cập gián tiếp vào các tên đã nhập đó trừ khi chúng là một phần được ghi rõ ràng trong API của mô-đun chứa, chẳng hạn như mô-đun

# Wrong:

# Arguments on first line forbidden when not using vertical alignment.
foo = long_function_name(var_one, var_two,
    var_three, var_four)

# Further indentation required as indentation is not distinguishable.
def long_function_name(
    var_one, var_two, var_three,
    var_four):
    print(var_one)
59 hoặc mô-đun
# Wrong:

# Arguments on first line forbidden when not using vertical alignment.
foo = long_function_name(var_one, var_two,
    var_three, var_four)

# Further indentation required as indentation is not distinguishable.
def long_function_name(
    var_one, var_two, var_three,
    var_four):
    print(var_one)
35 của gói hiển thị chức năng từ mô-đun con

Đề xuất lập trình

  • Mã phải được viết theo cách không gây bất lợi cho các triển khai Python khác (PyPy, Jython, IronPython, Cython, Psyco, v.v.)

    Ví dụ: không dựa vào việc triển khai nối chuỗi tại chỗ hiệu quả của CPython cho các câu lệnh ở dạng

    # Wrong:
    
    # Arguments on first line forbidden when not using vertical alignment.
    foo = long_function_name(var_one, var_two,
        var_three, var_four)
    
    # Further indentation required as indentation is not distinguishable.
    def long_function_name(
        var_one, var_two, var_three,
        var_four):
        print(var_one)
    
    61 hoặc
    # Wrong:
    
    # Arguments on first line forbidden when not using vertical alignment.
    foo = long_function_name(var_one, var_two,
        var_three, var_four)
    
    # Further indentation required as indentation is not distinguishable.
    def long_function_name(
        var_one, var_two, var_three,
        var_four):
        print(var_one)
    
    62. Tính năng tối ưu hóa này rất mong manh ngay cả trong CPython (nó chỉ hoạt động đối với một số loại) và hoàn toàn không có trong các triển khai không sử dụng đếm ngược. Trong các phần nhạy cảm về hiệu suất của thư viện, nên sử dụng biểu mẫu
    # Wrong:
    
    # Arguments on first line forbidden when not using vertical alignment.
    foo = long_function_name(var_one, var_two,
        var_three, var_four)
    
    # Further indentation required as indentation is not distinguishable.
    def long_function_name(
        var_one, var_two, var_three,
        var_four):
        print(var_one)
    
    63 để thay thế. Điều này sẽ đảm bảo rằng quá trình ghép nối diễn ra theo thời gian tuyến tính trên các triển khai khác nhau

  • Việc so sánh với các đơn vị như Không phải luôn được thực hiện với
    # Wrong:
    
    # Arguments on first line forbidden when not using vertical alignment.
    foo = long_function_name(var_one, var_two,
        var_three, var_four)
    
    # Further indentation required as indentation is not distinguishable.
    def long_function_name(
        var_one, var_two, var_three,
        var_four):
        print(var_one)
    
    02 hoặc
    # Wrong:
    
    # Arguments on first line forbidden when not using vertical alignment.
    foo = long_function_name(var_one, var_two,
        var_three, var_four)
    
    # Further indentation required as indentation is not distinguishable.
    def long_function_name(
        var_one, var_two, var_three,
        var_four):
        print(var_one)
    
    03, không bao giờ là toán tử đẳng thức

    Ngoài ra, hãy cẩn thận khi viết

    # Wrong:
    
    # Arguments on first line forbidden when not using vertical alignment.
    foo = long_function_name(var_one, var_two,
        var_three, var_four)
    
    # Further indentation required as indentation is not distinguishable.
    def long_function_name(
        var_one, var_two, var_three,
        var_four):
        print(var_one)
    
    66 khi bạn thực sự muốn nói đến
    # Wrong:
    
    # Arguments on first line forbidden when not using vertical alignment.
    foo = long_function_name(var_one, var_two,
        var_three, var_four)
    
    # Further indentation required as indentation is not distinguishable.
    def long_function_name(
        var_one, var_two, var_three,
        var_four):
        print(var_one)
    
    67 – e. g. khi kiểm tra xem một biến hoặc đối số mặc định là Không được đặt thành một số giá trị khác. Giá trị khác có thể có một loại (chẳng hạn như vùng chứa) có thể sai trong ngữ cảnh boolean

  • Sử dụng toán tử
    # Wrong:
    
    # Arguments on first line forbidden when not using vertical alignment.
    foo = long_function_name(var_one, var_two,
        var_three, var_four)
    
    # Further indentation required as indentation is not distinguishable.
    def long_function_name(
        var_one, var_two, var_three,
        var_four):
        print(var_one)
    
    03 thay vì
    # Wrong:
    
    # Arguments on first line forbidden when not using vertical alignment.
    foo = long_function_name(var_one, var_two,
        var_three, var_four)
    
    # Further indentation required as indentation is not distinguishable.
    def long_function_name(
        var_one, var_two, var_three,
        var_four):
        print(var_one)
    
    69. Mặc dù cả hai biểu thức đều giống hệt nhau về mặt chức năng, biểu thức trước dễ đọc hơn và được ưu tiên hơn

    my_list = [
        1, 2, 3,
        4, 5, 6,
    ]
    result = some_function_that_takes_arguments(
        'a', 'b', 'c',
        'd', 'e', 'f',
    )
    
    3

    my_list = [
        1, 2, 3,
        4, 5, 6,
    ]
    result = some_function_that_takes_arguments(
        'a', 'b', 'c',
        'd', 'e', 'f',
    )
    
    4

  • Khi triển khai các hoạt động đặt hàng với so sánh phong phú, tốt nhất là triển khai cả sáu hoạt động (
    # Wrong:
    
    # Arguments on first line forbidden when not using vertical alignment.
    foo = long_function_name(var_one, var_two,
        var_three, var_four)
    
    # Further indentation required as indentation is not distinguishable.
    def long_function_name(
        var_one, var_two, var_three,
        var_four):
        print(var_one)
    
    70,
    # Wrong:
    
    # Arguments on first line forbidden when not using vertical alignment.
    foo = long_function_name(var_one, var_two,
        var_three, var_four)
    
    # Further indentation required as indentation is not distinguishable.
    def long_function_name(
        var_one, var_two, var_three,
        var_four):
        print(var_one)
    
    71,
    # Wrong:
    
    # Arguments on first line forbidden when not using vertical alignment.
    foo = long_function_name(var_one, var_two,
        var_three, var_four)
    
    # Further indentation required as indentation is not distinguishable.
    def long_function_name(
        var_one, var_two, var_three,
        var_four):
        print(var_one)
    
    72,
    # Wrong:
    
    # Arguments on first line forbidden when not using vertical alignment.
    foo = long_function_name(var_one, var_two,
        var_three, var_four)
    
    # Further indentation required as indentation is not distinguishable.
    def long_function_name(
        var_one, var_two, var_three,
        var_four):
        print(var_one)
    
    73,
    # Wrong:
    
    # Arguments on first line forbidden when not using vertical alignment.
    foo = long_function_name(var_one, var_two,
        var_three, var_four)
    
    # Further indentation required as indentation is not distinguishable.
    def long_function_name(
        var_one, var_two, var_three,
        var_four):
        print(var_one)
    
    74,
    # Wrong:
    
    # Arguments on first line forbidden when not using vertical alignment.
    foo = long_function_name(var_one, var_two,
        var_three, var_four)
    
    # Further indentation required as indentation is not distinguishable.
    def long_function_name(
        var_one, var_two, var_three,
        var_four):
        print(var_one)
    
    75) thay vì dựa vào mã khác để chỉ thực hiện một so sánh cụ thể

    Để giảm thiểu nỗ lực liên quan, trình trang trí

    # Wrong:
    
    # Arguments on first line forbidden when not using vertical alignment.
    foo = long_function_name(var_one, var_two,
        var_three, var_four)
    
    # Further indentation required as indentation is not distinguishable.
    def long_function_name(
        var_one, var_two, var_three,
        var_four):
        print(var_one)
    
    76 cung cấp một công cụ để tạo các phương thức so sánh còn thiếu

    PEP 207 chỉ ra rằng các quy tắc phản xạ được giả định bởi Python. Như vậy, người phiên dịch có thể hoán đổi

    # Wrong:
    
    # Arguments on first line forbidden when not using vertical alignment.
    foo = long_function_name(var_one, var_two,
        var_three, var_four)
    
    # Further indentation required as indentation is not distinguishable.
    def long_function_name(
        var_one, var_two, var_three,
        var_four):
        print(var_one)
    
    77 với
    # Wrong:
    
    # Arguments on first line forbidden when not using vertical alignment.
    foo = long_function_name(var_one, var_two,
        var_three, var_four)
    
    # Further indentation required as indentation is not distinguishable.
    def long_function_name(
        var_one, var_two, var_three,
        var_four):
        print(var_one)
    
    78,
    # Wrong:
    
    # Arguments on first line forbidden when not using vertical alignment.
    foo = long_function_name(var_one, var_two,
        var_three, var_four)
    
    # Further indentation required as indentation is not distinguishable.
    def long_function_name(
        var_one, var_two, var_three,
        var_four):
        print(var_one)
    
    79 với
    # Wrong:
    
    # Arguments on first line forbidden when not using vertical alignment.
    foo = long_function_name(var_one, var_two,
        var_three, var_four)
    
    # Further indentation required as indentation is not distinguishable.
    def long_function_name(
        var_one, var_two, var_three,
        var_four):
        print(var_one)
    
    80, và có thể hoán đổi đối số của
    # Wrong:
    
    # Arguments on first line forbidden when not using vertical alignment.
    foo = long_function_name(var_one, var_two,
        var_three, var_four)
    
    # Further indentation required as indentation is not distinguishable.
    def long_function_name(
        var_one, var_two, var_three,
        var_four):
        print(var_one)
    
    81 và
    # Wrong:
    
    # Arguments on first line forbidden when not using vertical alignment.
    foo = long_function_name(var_one, var_two,
        var_three, var_four)
    
    # Further indentation required as indentation is not distinguishable.
    def long_function_name(
        var_one, var_two, var_three,
        var_four):
        print(var_one)
    
    82. Các phép toán
    # Wrong:
    
    # Arguments on first line forbidden when not using vertical alignment.
    foo = long_function_name(var_one, var_two,
        var_three, var_four)
    
    # Further indentation required as indentation is not distinguishable.
    def long_function_name(
        var_one, var_two, var_three,
        var_four):
        print(var_one)
    
    83 và
    # Wrong:
    
    # Arguments on first line forbidden when not using vertical alignment.
    foo = long_function_name(var_one, var_two,
        var_three, var_four)
    
    # Further indentation required as indentation is not distinguishable.
    def long_function_name(
        var_one, var_two, var_three,
        var_four):
        print(var_one)
    
    84 được đảm bảo sử dụng toán tử
    # Wrong:
    
    # Arguments on first line forbidden when not using vertical alignment.
    foo = long_function_name(var_one, var_two,
        var_three, var_four)
    
    # Further indentation required as indentation is not distinguishable.
    def long_function_name(
        var_one, var_two, var_three,
        var_four):
        print(var_one)
    
    64 và hàm
    # Wrong:
    
    # Arguments on first line forbidden when not using vertical alignment.
    foo = long_function_name(var_one, var_two,
        var_three, var_four)
    
    # Further indentation required as indentation is not distinguishable.
    def long_function_name(
        var_one, var_two, var_three,
        var_four):
        print(var_one)
    
    86 sử dụng toán tử
    # Wrong:
    
    # Arguments on first line forbidden when not using vertical alignment.
    foo = long_function_name(var_one, var_two,
        var_three, var_four)
    
    # Further indentation required as indentation is not distinguishable.
    def long_function_name(
        var_one, var_two, var_three,
        var_four):
        print(var_one)
    
    65. Tuy nhiên, tốt nhất là thực hiện cả sáu thao tác để không nảy sinh nhầm lẫn trong các ngữ cảnh khác

  • Luôn sử dụng câu lệnh def thay vì câu lệnh gán liên kết trực tiếp biểu thức lambda với mã định danh

    my_list = [
        1, 2, 3,
        4, 5, 6,
    ]
    result = some_function_that_takes_arguments(
        'a', 'b', 'c',
        'd', 'e', 'f',
    )
    
    5

    my_list = [
        1, 2, 3,
        4, 5, 6,
    ]
    result = some_function_that_takes_arguments(
        'a', 'b', 'c',
        'd', 'e', 'f',
    )
    
    6

    The first form means that the name of the resulting function object is specifically ‘f’ instead of the generic ‘’. This is more useful for tracebacks and string representations in general. The use of the assignment statement eliminates the sole benefit a lambda expression can offer over an explicit def statement (i.e. that it can be embedded inside a larger expression)

  • Rút ra các ngoại lệ từ
    # Wrong:
    
    # Arguments on first line forbidden when not using vertical alignment.
    foo = long_function_name(var_one, var_two,
        var_three, var_four)
    
    # Further indentation required as indentation is not distinguishable.
    def long_function_name(
        var_one, var_two, var_three,
        var_four):
        print(var_one)
    
    88 thay vì
    # Wrong:
    
    # Arguments on first line forbidden when not using vertical alignment.
    foo = long_function_name(var_one, var_two,
        var_three, var_four)
    
    # Further indentation required as indentation is not distinguishable.
    def long_function_name(
        var_one, var_two, var_three,
        var_four):
        print(var_one)
    
    89. Kế thừa trực tiếp từ
    # Wrong:
    
    # Arguments on first line forbidden when not using vertical alignment.
    foo = long_function_name(var_one, var_two,
        var_three, var_four)
    
    # Further indentation required as indentation is not distinguishable.
    def long_function_name(
        var_one, var_two, var_three,
        var_four):
        print(var_one)
    
    89 được dành riêng cho các trường hợp ngoại lệ khi việc bắt chúng hầu như luôn là điều sai trái

    Thiết kế hệ thống phân cấp ngoại lệ dựa trên sự khác biệt mà mã bắt ngoại lệ có thể cần, thay vì vị trí nơi phát sinh ngoại lệ. Nhằm mục đích trả lời câu hỏi "Điều gì đã xảy ra?"

    Các quy ước đặt tên lớp áp dụng ở đây, mặc dù bạn nên thêm hậu tố “Lỗi” vào các lớp ngoại lệ của mình nếu ngoại lệ đó là một lỗi. Các ngoại lệ không lỗi được sử dụng cho điều khiển luồng không cục bộ hoặc các dạng báo hiệu khác không cần hậu tố đặc biệt

  • Sử dụng chuỗi ngoại lệ một cách thích hợp.
    # Wrong:
    
    # Arguments on first line forbidden when not using vertical alignment.
    foo = long_function_name(var_one, var_two,
        var_three, var_four)
    
    # Further indentation required as indentation is not distinguishable.
    def long_function_name(
        var_one, var_two, var_three,
        var_four):
        print(var_one)
    
    91 nên được sử dụng để biểu thị sự thay thế rõ ràng mà không làm mất dấu vết ban đầu

    Khi cố tình thay thế một ngoại lệ bên trong (sử dụng

    # Wrong:
    
    # Arguments on first line forbidden when not using vertical alignment.
    foo = long_function_name(var_one, var_two,
        var_three, var_four)
    
    # Further indentation required as indentation is not distinguishable.
    def long_function_name(
        var_one, var_two, var_three,
        var_four):
        print(var_one)
    
    92), hãy đảm bảo rằng các chi tiết liên quan được chuyển sang ngoại lệ mới (chẳng hạn như giữ nguyên tên thuộc tính khi chuyển đổi KeyError thành AttributeError hoặc nhúng văn bản của ngoại lệ ban đầu vào thông báo ngoại lệ mới)

  • Khi bắt ngoại lệ, hãy đề cập đến các ngoại lệ cụ thể bất cứ khi nào có thể thay vì sử dụng mệnh đề
    # Wrong:
    
    # Arguments on first line forbidden when not using vertical alignment.
    foo = long_function_name(var_one, var_two,
        var_three, var_four)
    
    # Further indentation required as indentation is not distinguishable.
    def long_function_name(
        var_one, var_two, var_three,
        var_four):
        print(var_one)
    
    93 trần trụi

    my_list = [
        1, 2, 3,
        4, 5, 6,
    ]
    result = some_function_that_takes_arguments(
        'a', 'b', 'c',
        'd', 'e', 'f',
    )
    
    7

    Mệnh đề

    # Wrong:
    
    # Arguments on first line forbidden when not using vertical alignment.
    foo = long_function_name(var_one, var_two,
        var_three, var_four)
    
    # Further indentation required as indentation is not distinguishable.
    def long_function_name(
        var_one, var_two, var_three,
        var_four):
        print(var_one)
    
    93 trống sẽ bắt các ngoại lệ SystemExit và KeyboardInterrupt, khiến việc ngắt chương trình bằng Control-C trở nên khó khăn hơn và có thể ngụy trang cho các sự cố khác. Nếu bạn muốn bắt tất cả các ngoại lệ báo hiệu lỗi chương trình, hãy sử dụng
    # Wrong:
    
    # Arguments on first line forbidden when not using vertical alignment.
    foo = long_function_name(var_one, var_two,
        var_three, var_four)
    
    # Further indentation required as indentation is not distinguishable.
    def long_function_name(
        var_one, var_two, var_three,
        var_four):
        print(var_one)
    
    95 (ngoại trừ trần tương đương với
    # Wrong:
    
    # Arguments on first line forbidden when not using vertical alignment.
    foo = long_function_name(var_one, var_two,
        var_three, var_four)
    
    # Further indentation required as indentation is not distinguishable.
    def long_function_name(
        var_one, var_two, var_three,
        var_four):
        print(var_one)
    
    96)

    Một nguyên tắc nhỏ là hạn chế sử dụng các mệnh đề 'ngoại trừ' trần trong hai trường hợp

    1. Nếu trình xử lý ngoại lệ sẽ in ra hoặc ghi nhật ký truy nguyên;
    2. Nếu mã cần thực hiện một số công việc dọn dẹp, nhưng sau đó để ngoại lệ lan truyền lên trên với
      # Wrong:
      
      # Arguments on first line forbidden when not using vertical alignment.
      foo = long_function_name(var_one, var_two,
          var_three, var_four)
      
      # Further indentation required as indentation is not distinguishable.
      def long_function_name(
          var_one, var_two, var_three,
          var_four):
          print(var_one)
      
      97.
      # Wrong:
      
      # Arguments on first line forbidden when not using vertical alignment.
      foo = long_function_name(var_one, var_two,
          var_three, var_four)
      
      # Further indentation required as indentation is not distinguishable.
      def long_function_name(
          var_one, var_two, var_three,
          var_four):
          print(var_one)
      
      98 có thể là một cách tốt hơn để xử lý trường hợp này
  • Khi bắt lỗi hệ điều hành, hãy ưu tiên hệ thống phân cấp ngoại lệ rõ ràng được giới thiệu trong Python 3. 3 về sự xem xét nội tâm của các giá trị
    # Wrong:
    
    # Arguments on first line forbidden when not using vertical alignment.
    foo = long_function_name(var_one, var_two,
        var_three, var_four)
    
    # Further indentation required as indentation is not distinguishable.
    def long_function_name(
        var_one, var_two, var_three,
        var_four):
        print(var_one)
    
    99
  • Ngoài ra, đối với tất cả các mệnh đề try/ngoại trừ, hãy giới hạn mệnh đề
    # Hanging indents *may* be indented to other than 4 spaces.
    foo = long_function_name(
      var_one, var_two,
      var_three, var_four)
    
    00 ở số lượng mã tối thiểu tuyệt đối cần thiết. Một lần nữa, điều này tránh che lỗi

    my_list = [
        1, 2, 3,
        4, 5, 6,
    ]
    result = some_function_that_takes_arguments(
        'a', 'b', 'c',
        'd', 'e', 'f',
    )
    
    8

    my_list = [
        1, 2, 3,
        4, 5, 6,
    ]
    result = some_function_that_takes_arguments(
        'a', 'b', 'c',
        'd', 'e', 'f',
    )
    
    9

  • Khi một tài nguyên là cục bộ của một đoạn mã cụ thể, hãy sử dụng câu lệnh
    # Wrong:
    
    # Arguments on first line forbidden when not using vertical alignment.
    foo = long_function_name(var_one, var_two,
        var_three, var_four)
    
    # Further indentation required as indentation is not distinguishable.
    def long_function_name(
        var_one, var_two, var_three,
        var_four):
        print(var_one)
    
    01 để đảm bảo nó được dọn sạch nhanh chóng và đáng tin cậy sau khi sử dụng. Câu lệnh thử/cuối cùng cũng được chấp nhận
  • Các trình quản lý bối cảnh nên được gọi thông qua các hàm hoặc phương thức riêng biệt bất cứ khi nào chúng làm điều gì đó ngoài việc thu thập và giải phóng tài nguyên

    # Wrong:
    
    # Arguments on first line forbidden when not using vertical alignment.
    foo = long_function_name(var_one, var_two,
        var_three, var_four)
    
    # Further indentation required as indentation is not distinguishable.
    def long_function_name(
        var_one, var_two, var_three,
        var_four):
        print(var_one)
    
    10

    # Wrong:
    
    # Arguments on first line forbidden when not using vertical alignment.
    foo = long_function_name(var_one, var_two,
        var_three, var_four)
    
    # Further indentation required as indentation is not distinguishable.
    def long_function_name(
        var_one, var_two, var_three,
        var_four):
        print(var_one)
    
    11

    Ví dụ sau không cung cấp bất kỳ thông tin nào để chỉ ra rằng các phương thức

    # Hanging indents *may* be indented to other than 4 spaces.
    foo = long_function_name(
      var_one, var_two,
      var_three, var_four)
    
    02 và
    # Hanging indents *may* be indented to other than 4 spaces.
    foo = long_function_name(
      var_one, var_two,
      var_three, var_four)
    
    03 đang làm điều gì đó ngoài việc đóng kết nối sau một giao dịch. Rõ ràng là quan trọng trong trường hợp này

  • Hãy nhất quán trong báo cáo trả lại. Tất cả các câu lệnh trả về trong một hàm sẽ trả về một biểu thức hoặc không câu lệnh nào trong số chúng phải trả về. Nếu bất kỳ câu lệnh return nào trả về một biểu thức, thì bất kỳ câu lệnh return nào không có giá trị nào được trả về phải nêu rõ điều này là
    # Hanging indents *may* be indented to other than 4 spaces.
    foo = long_function_name(
      var_one, var_two,
      var_three, var_four)
    
    04 và một câu lệnh return rõ ràng phải có ở cuối hàm (nếu có thể truy cập được)

    # Wrong:
    
    # Arguments on first line forbidden when not using vertical alignment.
    foo = long_function_name(var_one, var_two,
        var_three, var_four)
    
    # Further indentation required as indentation is not distinguishable.
    def long_function_name(
        var_one, var_two, var_three,
        var_four):
        print(var_one)
    
    12

    # Wrong:
    
    # Arguments on first line forbidden when not using vertical alignment.
    foo = long_function_name(var_one, var_two,
        var_three, var_four)
    
    # Further indentation required as indentation is not distinguishable.
    def long_function_name(
        var_one, var_two, var_three,
        var_four):
        print(var_one)
    
    13

  • Sử dụng
    # Hanging indents *may* be indented to other than 4 spaces.
    foo = long_function_name(
      var_one, var_two,
      var_three, var_four)
    
    05 và
    # Hanging indents *may* be indented to other than 4 spaces.
    foo = long_function_name(
      var_one, var_two,
      var_three, var_four)
    
    06 thay vì cắt chuỗi để kiểm tra tiền tố hoặc hậu tố

    startedwith() và endwith() sạch hơn và ít bị lỗi hơn

    # Wrong:
    
    # Arguments on first line forbidden when not using vertical alignment.
    foo = long_function_name(var_one, var_two,
        var_three, var_four)
    
    # Further indentation required as indentation is not distinguishable.
    def long_function_name(
        var_one, var_two, var_three,
        var_four):
        print(var_one)
    
    14

    # Wrong:
    
    # Arguments on first line forbidden when not using vertical alignment.
    foo = long_function_name(var_one, var_two,
        var_three, var_four)
    
    # Further indentation required as indentation is not distinguishable.
    def long_function_name(
        var_one, var_two, var_three,
        var_four):
        print(var_one)
    
    15

  • So sánh loại đối tượng phải luôn sử dụng isinstance() thay vì so sánh trực tiếp các loại

    # Wrong:
    
    # Arguments on first line forbidden when not using vertical alignment.
    foo = long_function_name(var_one, var_two,
        var_three, var_four)
    
    # Further indentation required as indentation is not distinguishable.
    def long_function_name(
        var_one, var_two, var_three,
        var_four):
        print(var_one)
    
    16

    # Wrong:
    
    # Arguments on first line forbidden when not using vertical alignment.
    foo = long_function_name(var_one, var_two,
        var_three, var_four)
    
    # Further indentation required as indentation is not distinguishable.
    def long_function_name(
        var_one, var_two, var_three,
        var_four):
        print(var_one)
    
    17

  • Đối với các chuỗi, (chuỗi, danh sách, bộ dữ liệu), hãy sử dụng thực tế là các chuỗi trống là sai

    # Wrong:
    
    # Arguments on first line forbidden when not using vertical alignment.
    foo = long_function_name(var_one, var_two,
        var_three, var_four)
    
    # Further indentation required as indentation is not distinguishable.
    def long_function_name(
        var_one, var_two, var_three,
        var_four):
        print(var_one)
    
    18

    # Wrong:
    
    # Arguments on first line forbidden when not using vertical alignment.
    foo = long_function_name(var_one, var_two,
        var_three, var_four)
    
    # Further indentation required as indentation is not distinguishable.
    def long_function_name(
        var_one, var_two, var_three,
        var_four):
        print(var_one)
    
    19

  • Đừng viết các chuỗi ký tự dựa trên khoảng trắng ở cuối đáng kể. Khoảng trắng ở cuối như vậy không thể phân biệt được bằng mắt thường và một số trình soạn thảo (hoặc gần đây hơn, reindent. py) sẽ cắt chúng
  • Không so sánh các giá trị boolean với Đúng hoặc Sai bằng cách sử dụng
    # Wrong:
    
    # Arguments on first line forbidden when not using vertical alignment.
    foo = long_function_name(var_one, var_two,
        var_three, var_four)
    
    # Further indentation required as indentation is not distinguishable.
    def long_function_name(
        var_one, var_two, var_three,
        var_four):
        print(var_one)
    
    63

    # Wrong:
    # operators sit far away from their operands
    income = (gross_wages +
              taxable_interest +
              (dividends - qualified_dividends) -
              ira_deduction -
              student_loan_interest)
    
    0

    # Wrong:
    # operators sit far away from their operands
    income = (gross_wages +
              taxable_interest +
              (dividends - qualified_dividends) -
              ira_deduction -
              student_loan_interest)
    
    1

    Tệ hơn

    # Wrong:
    # operators sit far away from their operands
    income = (gross_wages +
              taxable_interest +
              (dividends - qualified_dividends) -
              ira_deduction -
              student_loan_interest)
    
    2

  • Việc sử dụng các câu lệnh điều khiển luồng
    # Hanging indents *may* be indented to other than 4 spaces.
    foo = long_function_name(
      var_one, var_two,
      var_three, var_four)
    
    08/
    # Hanging indents *may* be indented to other than 4 spaces.
    foo = long_function_name(
      var_one, var_two,
      var_three, var_four)
    
    09/
    # Hanging indents *may* be indented to other than 4 spaces.
    foo = long_function_name(
      var_one, var_two,
      var_three, var_four)
    
    10 trong bộ cuối cùng của một
    # Wrong:
    
    # Arguments on first line forbidden when not using vertical alignment.
    foo = long_function_name(var_one, var_two,
        var_three, var_four)
    
    # Further indentation required as indentation is not distinguishable.
    def long_function_name(
        var_one, var_two, var_three,
        var_four):
        print(var_one)
    
    98, trong đó câu lệnh điều khiển luồng sẽ nhảy ra ngoài bộ cuối cùng, không được khuyến khích. Điều này là do các câu lệnh như vậy sẽ hoàn toàn hủy bỏ bất kỳ ngoại lệ đang hoạt động nào đang lan truyền qua bộ cuối cùng

    # Wrong:
    # operators sit far away from their operands
    income = (gross_wages +
              taxable_interest +
              (dividends - qualified_dividends) -
              ira_deduction -
              student_loan_interest)
    
    3

Chú thích chức năng

Với việc chấp nhận PEP 484, các quy tắc kiểu cho chú thích chức năng đã thay đổi

  • Chú thích chức năng nên sử dụng cú pháp PEP 484 (có một số đề xuất định dạng cho chú thích trong phần trước)
  • Thử nghiệm với các kiểu chú thích đã được đề xuất trước đây trong PEP này không còn được khuyến khích nữa
  • Tuy nhiên, bên ngoài stdlib, các thử nghiệm trong quy tắc của PEP 484 hiện được khuyến khích. Ví dụ: đánh dấu một thư viện hoặc ứng dụng lớn của bên thứ ba bằng các chú thích loại kiểu PEP 484, xem xét việc thêm các chú thích đó dễ dàng như thế nào và quan sát xem liệu sự hiện diện của chúng có làm tăng tính dễ hiểu của mã hay không
  • Thư viện chuẩn Python nên thận trọng trong việc áp dụng các chú thích như vậy, nhưng việc sử dụng chúng được cho phép đối với mã mới và tái cấu trúc lớn
  • Đối với mã muốn sử dụng các chú thích chức năng khác, bạn nên đặt một nhận xét có dạng

    # Wrong:
    # operators sit far away from their operands
    income = (gross_wages +
              taxable_interest +
              (dividends - qualified_dividends) -
              ira_deduction -
              student_loan_interest)
    
    4

    gần đầu tệp; . (Có thể tìm thấy nhiều cách chi tiết hơn để vô hiệu hóa khiếu nại từ trình kiểm tra loại trong PEP 484. )

  • Giống như linters, bộ kiểm tra loại là công cụ tùy chọn, riêng biệt. Trình thông dịch Python theo mặc định không được đưa ra bất kỳ thông báo nào do kiểm tra kiểu và không được thay đổi hành vi của chúng dựa trên chú thích
  • Người dùng không muốn sử dụng trình kiểm tra loại có thể bỏ qua chúng. Tuy nhiên, người dùng các gói thư viện của bên thứ ba có thể muốn chạy trình kiểm tra loại trên các gói đó. Với mục đích này, PEP 484 khuyến nghị sử dụng các tệp sơ khai. . pyi được đọc bởi trình kiểm tra loại theo sở thích của tệp tương ứng. tập tin py. Các tệp sơ khai có thể được phân phối cùng với thư viện hoặc riêng lẻ (với sự cho phép của tác giả thư viện) thông qua kho lưu trữ được đánh máy [5]

Chú thích biến

PEP 526 đã giới thiệu các chú thích biến. Các đề xuất kiểu cho chúng tương tự như các đề xuất về chú thích chức năng được mô tả ở trên

Cách tốt nhất để bình luận trong Python là gì?

Nhận xét bằng Python bắt đầu bằng ký hiệu # . Đây là một ví dụ. # Đoạn mã dưới đây in Hello World. vào giao diện điều khiển print("Xin chào thế giới. ") Trong đoạn mã trên, tôi đã sử dụng một nhận xét để giải thích mã này làm gì.

Khi nào bạn nên bình luận bằng Python?

Nhận xét có thể được sử dụng để giải thích mã Python . Nhận xét có thể được sử dụng để làm cho mã dễ đọc hơn. Nhận xét có thể được sử dụng để ngăn chặn thực thi khi kiểm tra mã.

Cách nhanh nhất để nhận xét mã trong Python là gì?

Cách phổ biến nhất để nhận xét một khối mã trong Python là sử dụng ký tự # . Bất kỳ dòng mã nào bắt đầu bằng # trong Python đều được coi là nhận xét và bị trình biên dịch bỏ qua.

Nhận xét tốt trong mã là gì?

Dưới đây là một số quy tắc giúp bạn đạt được một phương tiện hạnh phúc. .
Quy tắc 1. Nhận xét không được trùng lặp mã
Quy tắc 2. Nhận xét tốt không bào chữa cho mã không rõ ràng
Quy tắc 3. Nếu bạn không thể viết bình luận rõ ràng, có thể có vấn đề với mã
Quy tắc 4. Nhận xét nên xua tan sự nhầm lẫn, không gây ra nó