Python sửa lỗi chính tả

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

Show

    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

    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 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

    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. 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ó thể 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. 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',
    )
    

    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

    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 với 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

    # Correct:
    # easy to match operators with operands
    income = (gross_wages
              + taxable_interest
              + (dividends - qualified_dividends)
              - ira_deduction
              - student_loan_interest)
    
    1 dài, nhiều câu lệnh không thể sử dụng tiếp tục ngầm định 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 đó

    with open('/path/to/some/file/you/want/to/read') as file_1, \
         open('/path/to/some/file/being/written', 'w') as file_2:
        file_2.write(file_1.read())
    

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

    # Correct:
    # easy to match operators with operands
    income = (gross_wages
              + taxable_interest
              + (dividends - qualified_dividends)
              - ira_deduction
              - student_loan_interest)
    
    1 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

    # Correct:
    # easy to match operators with operands
    income = (gross_wages
              + taxable_interest
              + (dividends - qualified_dividends)
              - ira_deduction
              - student_loan_interest)
    
    3

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

    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 vă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”

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

    # Correct:
    # easy to match operators with operands
    income = (gross_wages
              + taxable_interest
              + (dividends - qualified_dividends)
              - ira_deduction
              - student_loan_interest)
    

    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

    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ã 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, các từ viết tắt và thuật ngữ kỹ thuật được sử dụng không phải là 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 thường phải trên các dòng riêng biệt

      # Correct:
      import os
      import sys
      

      # 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

    • Nên nhập tuyệt đối 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 _______10_______4)

      # 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 (
      # Correct:
      # easy to match operators with operands
      income = (gross_wages
                + taxable_interest
                + (dividends - qualified_dividends)
                - ira_deduction
                - student_loan_interest)
      
      5), 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

    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ư

    # Correct:
    # easy to match operators with operands
    income = (gross_wages
              + taxable_interest
              + (dividends - qualified_dividends)
              - ira_deduction
              - student_loan_interest)
    
    6,
    # Correct:
    # easy to match operators with operands
    income = (gross_wages
              + taxable_interest
              + (dividends - qualified_dividends)
              - ira_deduction
              - student_loan_interest)
    
    7,
    # Correct:
    # easy to match operators with operands
    income = (gross_wages
              + taxable_interest
              + (dividends - qualified_dividends)
              - ira_deduction
              - student_loan_interest)
    
    8, 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
    # Correct:
    # easy to match operators with operands
    income = (gross_wages
              + taxable_interest
              + (dividends - qualified_dividends)
              - ira_deduction
              - student_loan_interest)
    
    9. 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

    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

    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

    • 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 (
      # Correct:
      import os
      import sys
      
      0), bài tập tăng cường (
      # Correct:
      import os
      import sys
      
      1,
      # Correct:
      import os
      import sys
      
      2, v.v. ), so sánh (
      # Correct:
      import os
      import sys
      
      3,
      # Correct:
      import os
      import sys
      
      4,
      # Correct:
      import os
      import sys
      
      5,
      # Correct:
      import os
      import sys
      
      6,
      # Correct:
      import os
      import sys
      
      7,
      # Correct:
      import os
      import sys
      
      8,
      # Correct:
      import os
      import sys
      
      9,
      # 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), phép toán luậ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)
      
      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 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 dấu
      # Correct:
      import os
      import sys
      
      0 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ố hàm 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

      # Correct:
      import os
      import sys
      
      0

      # 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

    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 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 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 chú thích 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 dấu cách (trừ khi đó là văn bản thụt vào bên trong chú thích)

    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

    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

    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 điều quan trọng nhất là, ______1_______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ữ phần đó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)
      
      13 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

    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ộ

    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

    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ữ cái viết 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ì vẻ ngoài gập ghềnh của các chữ cái trong đó ). Đ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 lập trình viên 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;

    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ế

    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 PEP 3131

    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 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

    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

    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)

    (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 thô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ế
    # Correct:
    # easy to match operators with operands
    income = (gross_wages
              + taxable_interest
              + (dividends - qualified_dividends)
              - ira_deduction
              - student_loan_interest)
    
    6 để ngăn việc xuất toàn cầu hoặc sử dụng quy ước cũ hơn về việc thêm tiền tố cho 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 rằng các toàn cục này là “mô-đun không công khai”)

    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

    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 một đối số hàm xung đột với một 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. )

    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 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)

    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

    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

    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

    # Correct:
    # easy to match operators with operands
    income = (gross_wages
              + taxable_interest
              + (dividends - qualified_dividends)
              - ira_deduction
              - student_loan_interest)
    
    6. Đặt
    # Correct:
    # easy to match operators with operands
    income = (gross_wages
              + taxable_interest
              + (dividends - qualified_dividends)
              - ira_deduction
              - student_loan_interest)
    
    6 thành danh sách trống cho biết mô-đun không có API công khai

    Ngay cả khi đặt ____10_______6 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 lại rõ ràng trong API của mô-đun chứa, 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)
    
    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ừ các mô-đun con

    • 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ối ưu hóa này rất dễ hỏng 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 những người độc thân như Không nên luôn 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 ____1_______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 tất 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. Do đó, thông dịch viên 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 lập luận 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ử
      # Correct:
      import os
      import sys
      
      4 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ử
      # Correct:
      import os
      import sys
      
      5. 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à 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 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
      # Correct:
      # easy to match operators with operands
      income = (gross_wages
                + taxable_interest
                + (dividends - qualified_dividends)
                - ira_deduction
                - student_loan_interest)
      
      1 để đả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

      with open('/path/to/some/file/you/want/to/read') as file_1, \
           open('/path/to/some/file/being/written', 'w') as file_2:
          file_2.write(file_1.read())
      
      0

      with open('/path/to/some/file/you/want/to/read') as file_1, \
           open('/path/to/some/file/being/written', 'w') as file_2:
          file_2.write(file_1.read())
      
      1

      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 trả về giá trị nào đều 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)

      with open('/path/to/some/file/you/want/to/read') as file_1, \
           open('/path/to/some/file/being/written', 'w') as file_2:
          file_2.write(file_1.read())
      
      2

      with open('/path/to/some/file/you/want/to/read') as file_1, \
           open('/path/to/some/file/being/written', 'w') as file_2:
          file_2.write(file_1.read())
      
      3

    • 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

      with open('/path/to/some/file/you/want/to/read') as file_1, \
           open('/path/to/some/file/being/written', 'w') as file_2:
          file_2.write(file_1.read())
      
      4

      with open('/path/to/some/file/you/want/to/read') as file_1, \
           open('/path/to/some/file/being/written', 'w') as file_2:
          file_2.write(file_1.read())
      
      5

    • 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

      with open('/path/to/some/file/you/want/to/read') as file_1, \
           open('/path/to/some/file/being/written', 'w') as file_2:
          file_2.write(file_1.read())
      
      6

      with open('/path/to/some/file/you/want/to/read') as file_1, \
           open('/path/to/some/file/being/written', 'w') as file_2:
          file_2.write(file_1.read())
      
      7

    • Đố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

      with open('/path/to/some/file/you/want/to/read') as file_1, \
           open('/path/to/some/file/being/written', 'w') as file_2:
          file_2.write(file_1.read())
      
      8

      with open('/path/to/some/file/you/want/to/read') as file_1, \
           open('/path/to/some/file/being/written', 'w') as file_2:
          file_2.write(file_1.read())
      
      9

    • Đừ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
      # Correct:
      import os
      import sys
      
      3

      # 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

    • Không khuyến khích sử dụng 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/_______2_______09/
      # Hanging indents *may* be indented to other than 4 spaces.
      foo = long_function_name(
        var_one, var_two,
        var_three, var_four)
      
      10. Đ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

    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 biệt (với sự cho phép của tác giả thư viện) thông qua typeshed repo

    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