Hướng dẫn python blank lines between functions - python dòng trống giữa các hàm

Nếu một người sẽ kiểm tra với phần 'dòng trống' của PEP8 - người ta sẽ tìm thấy những điều sau:

Show

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

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

Các dòng trống có thể được sử dụng (một cách tiết kiệm) để 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 lớp lót liên quan (ví dụ: một tập hợp các triển khai giả).

Sử dụng các dòng trống trong các chức năng, một cách tiết kiệm, để chỉ ra các phần logic.

Về nhập khẩu, PEP8 States:

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

...

Nhập khẩu phải được nhóm theo thứ tự sau:

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

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

Vì vậy, ví dụ của bạn, định dạng tuân thủ PEP8 sẽ là:

import os


def func1():


def func2():

Chỉ để đưa ra một minh họa toàn diện hơn:

import re
import glob
import sys

import requests
import scrapy

from flask import Flask
from my_local_module import MyClass


def top_level_function1():
    pass


def top_level_function2():
    pass


class TestClass(object):
    
    def class_method1():
        pass

    def class_method2():
        pass


class TestClass2(object):
    
    def class2_method1():
        pass

    def class2_method2():
        pass

Tác giả: Guido Van Rossum, Barry Warsaw, Nick Coghlan Tình trạng: Activetype: ProcessCreated: 05-Jul-2001post-History: 05-Jul-2001, 01-Aug-2013:Guido van Rossum , Barry Warsaw , Nick Coghlan Status:ActiveType:ProcessCreated:05-Jul-2001Post-History:05-Jul-2001, 01-Aug-2013
Mục lục
  • Giới thiệu
  • Một quán ngu si là tinh nghịch của tâm trí nhỏ
  • Bố trí mã
    • Vết lõm
    • Tab hoặc không gian?
    • Chiều dài đường tối đa
    • Có nên phá vỡ dòng trước hoặc sau khi vận hành nhị phân?
    • Các dòng trống
    • Mã hóa tập tin nguồn
    • Nhập khẩu
    • Tên Dunder cấp độ mô -đun
  • Trích dẫn chuỗi
  • Khoảng trắng trong biểu thức và câu lệnh
    • Thói xấu
    • Các khuyến nghị khác
  • Khi nào nên sử dụng dấu phẩy kéo dài
  • Bình luận
    • Khối ý kiến
    • Ý kiến ​​nội tuyến
    • Chuỗi tài liệu
  • Đặt tên quy ước
    • Nguyên tắc ghi đè
    • Mô tả: Kiểu đặt tên
    • Quy định: Đặt tên quy ước
      • Tên cần tránh
      • Khả năng tương thích ASCII
      • Tên gói và tên mô -đun
      • Tên lớp
      • Nhập tên biến
      • Tên ngoại lệ
      • Tên biến toàn cầu
      • Tên chức năng và tên biến
      • Các đối số chức năng và phương thức
      • Tên phương thức và biến thể hiện
      • Hằng số
      • Thiết kế cho thừa kế
    • Giao diện công khai và nội bộ
  • Khuyến nghị lập trình
    • Chú thích chức năng
    • Chú thích biến
  • Người giới thiệu
  • Bản quyền

Giới thiệu

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

Bố trí mã

Vết lõm

Tab hoặc không gian?

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

Bố trí mã

Vết lõm

Tab hoặc không gian?

Chiều dài đường tối đa

Có nên phá vỡ dòng trước hoặc sau khi vận hành nhị phân?

  1. Các dòng trống
  2. Mã hóa tập tin nguồn
  3. Nhập khẩu
  4. Tên Dunder cấp độ mô -đun

Bố trí mã

Vết lõm

Sử dụng 4 không gian trên mỗi cấp độ thụt.

Các dòng tiếp tục nên căn chỉnh các phần tử được bọc theo chiều dọc bằng cách sử dụng đường thẳng của Python, nối bên trong dấu ngoặc đơn, dấu ngoặc và niềng răng hoặc sử dụng thụt lề treo [1]. Khi sử dụng thụt lề treo sau đây nên được xem xét; Không nên có đối số trên dòng đầu tiên và nên sử dụng thụt thêm để phân biệt rõ ràng là một dòng tiếp tục:

# 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 không gian là tùy chọn cho các dòng tiếp tục.

Optional:

# 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 có điều kiện của ____ ____ 68-tatatement đủ 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 hai ký tự (tức là

my_list = [
    1, 2, 3,
    4, 5, 6,
    ]
result = some_function_that_takes_arguments(
    'a', 'b', 'c',
    'd', 'e', 'f',
    )
8), cộng với một không gian, cộng với dấu ngoặc đơn tạo ra một Thắng 4 không gian cho các dòng tiếp theo của điều kiện đa dòng. Điều này có thể tạo ra một cuộc xung đột trực quan với bộ mã được thụt vào lồng bên trong ____ ____ 68-tatatement, cũng sẽ tự nhiên được thụt vào 4 không gian. PEP này không có vị trí rõ ràng về cách (hoặc) để phân biệt trực quan các dòng có điều kiện như vậy với bộ lồng nhau bên trong ________ 68-tatatement. Các tùy chọn 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 các cuộc thảo luận về việc nên phá vỡ trước hay sau các nhà khai thác nhị phân bên dưới.)

Đóng nẹp/giá đỡ/dấu ngoặc đơn trên các cấu trúc đa dòng có thể xếp theo ký tự không phải là màu đầu tiên của dòng danh sách cuối cùng, như trong:

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

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

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

Tab hoặc không gian?

Không gian là phương pháp thụt đầu tiên ưa thích.

Các tab chỉ nên được sử dụng để duy trì sự phù hợp với mã đã được thụt vào với các tab.

Python không hoàn toàn trộn lẫn các tab và không gian để thụt vào.

Chiều dài đường tối đa

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

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

Giới hạn chiều rộng cửa sổ Trình soạn thảo cần thiết cho phép có một số tệp mở cạnh nhau và hoạt động tốt khi sử dụng các công cụ đánh giá mã trình bày hai phiên bản trong các cột liền kề.

Việc 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ó khó hiểu hơn. Các giới hạn được chọn để tránh bọc trong các 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 glyph điểm trong cột cuối cùng khi các dòng gói. Một số công cụ dựa trên web có thể không cung cấp kết thúc dòng động.

Một số đội thích mạnh mẽ một 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, có thể tăng giới hạn độ dài dòng lên tới 99 ký tự, với điều kiện là nhận xét và tài liệu vẫn được gói ở 72 ký tự.

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

Cách ưa thích để gói các đường dài là bằng cách sử dụng sự tiếp tục dòng ngụ ý của Python, bên trong ngoặc đơn, ngoặc và thanh giằng. Các đường dài có thể được phá vỡ trên 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 theo sở thích để sử dụng dấu gạch chéo ngược để tiếp tục dòng.

Backslashes vẫn có thể phù hợp đôi khi. Ví dụ, dài, nhiều ____ 72 không thể sử dụng tiếp tục ngầm trước Python 3.10, do đó, 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())

.

Một trường hợp khác là với các tuyên bố

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

Hãy chắc chắn để thụt dòng dòng tiếp tục một cách thích hợp.

Có nên phá vỡ dòng trước hoặc sau khi vận hành nhị phân?

Trong nhiều thập kỷ, phong cách được đề xuất là phá vỡ sau khi các nhà khai thác nhị phân. Nhưng điều này có thể làm tổn thương khả năng đọc theo hai cách: các nhà khai thác 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 chuyển ra khỏi toán hạng của nó và vào dòng trước. Ở đây, mắt phải làm thêm để cho biết mục nào được thêm vào và cái nào được 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à các 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 các máy tính và loạt sắp xếp của mình: Mặc dù các công thức trong một đoạn văn luôn bị phá vỡ sau các hoạt động và quan hệ nhị phân, các công thức hiển thị luôn bị phá vỡ trước khi hoạt động nhị phân [3].

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

import re
import glob
import sys

import requests
import scrapy

from flask import Flask
from my_local_module import MyClass


def top_level_function1():
    pass


def top_level_function2():
    pass


class TestClass(object):
    
    def class_method1():
        pass

    def class_method2():
        pass


class TestClass2(object):
    
    def class2_method1():
        pass

    def class2_method2():
        pass
0

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

Các dòng trống

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

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

Các dòng trống có thể được sử dụng (một cách tiết kiệm) để 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 lớp lót liên quan (ví dụ: một tập hợp các triển khai giả).

Sử dụng các dòng trống trong các chức năng, một cách tiết kiệm, để chỉ ra các phần logic.

Python chấp nhận ký tự thức ăn điều khiển-l (tức là ^l) là khoảng trắng; Nhiều công cụ coi các ký tự này là dấu phân cách trang, vì vậy bạn có thể sử dụng chúng để tách các trang liên quan đến tệp của mình. Lưu ý, một số trình chỉnh sửa và người xem mã dựa trên web có thể không nhận ra Control-L là nguồn cấp dữ liệu biểu mẫu và sẽ hiển thị một glyph khác ở vị trí của nó.

Mã hóa tập tin nguồn

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

Trong thư viện tiêu chuẩn, các 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 các ký tự không phải ASCII một cách tiết kiệm, 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à các dấu lệnh byte.

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

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

Nhập khẩu

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

    import re
    import glob
    import sys
    
    import requests
    import scrapy
    
    from flask import Flask
    from my_local_module import MyClass
    
    
    def top_level_function1():
        pass
    
    
    def top_level_function2():
        pass
    
    
    class TestClass(object):
        
        def class_method1():
            pass
    
        def class_method2():
            pass
    
    
    class TestClass2(object):
        
        def class2_method1():
            pass
    
        def class2_method2():
            pass
    
    1

    Nó có thể nói điều này mặc dù:

    import re
    import glob
    import sys
    
    import requests
    import scrapy
    
    from flask import Flask
    from my_local_module import MyClass
    
    
    def top_level_function1():
        pass
    
    
    def top_level_function2():
        pass
    
    
    class TestClass(object):
        
        def class_method1():
            pass
    
        def class_method2():
            pass
    
    
    class TestClass2(object):
        
        def class2_method1():
            pass
    
        def class2_method2():
            pass
    
    2

  • Nhập khẩu luôn được đặt ở đầu tệp, ngay sau khi bất kỳ bình luận và tài liệu mô -đun nào, và trước khi mô -đun toàn cầu và hằng số.

    Nhập khẩu phải được nhóm theo thứ tự sau:

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

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

  • Nhập khẩu tuyệt đối được khuyến nghị, vì chúng thường dễ đọc hơn và có xu hướng hoạt động tốt hơn (hoặc ít nhất là đưa ra thông báo lỗi tốt hơn) nếu hệ thống nhập được 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 trên
    my_list = [
        1, 2, 3,
        4, 5, 6,
    ]
    result = some_function_that_takes_arguments(
        'a', 'b', 'c',
        'd', 'e', 'f',
    )
    
    5):

    import re
    import glob
    import sys
    
    import requests
    import scrapy
    
    from flask import Flask
    from my_local_module import MyClass
    
    
    def top_level_function1():
        pass
    
    
    def top_level_function2():
        pass
    
    
    class TestClass(object):
        
        def class_method1():
            pass
    
        def class_method2():
            pass
    
    
    class TestClass2(object):
        
        def class2_method1():
            pass
    
        def class2_method2():
            pass
    
    3

    Tuy nhiên, nhập khẩu tương đối rõ ràng là một sự 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 trong đó sử dụng nhập khẩu tuyệt đối sẽ là dòng chảy không cần thiết:

    import re
    import glob
    import sys
    
    import requests
    import scrapy
    
    from flask import Flask
    from my_local_module import MyClass
    
    
    def top_level_function1():
        pass
    
    
    def top_level_function2():
        pass
    
    
    class TestClass(object):
        
        def class_method1():
            pass
    
        def class_method2():
            pass
    
    
    class TestClass2(object):
        
        def class2_method1():
            pass
    
        def class2_method2():
            pass
    
    4

    Mã thư viện tiêu 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, nó thường ổn khi đánh vần điều này:

    import re
    import glob
    import sys
    
    import requests
    import scrapy
    
    from flask import Flask
    from my_local_module import MyClass
    
    
    def top_level_function1():
        pass
    
    
    def top_level_function2():
        pass
    
    
    class TestClass(object):
        
        def class_method1():
            pass
    
        def class_method2():
            pass
    
    
    class TestClass2(object):
        
        def class2_method1():
            pass
    
        def class2_method2():
            pass
    
    5

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

    import re
    import glob
    import sys
    
    import requests
    import scrapy
    
    from flask import Flask
    from my_local_module import MyClass
    
    
    def top_level_function1():
        pass
    
    
    def top_level_function2():
        pass
    
    
    class TestClass(object):
        
        def class_method1():
            pass
    
        def class_method2():
            pass
    
    
    class TestClass2(object):
        
        def class2_method1():
            pass
    
        def class2_method2():
            pass
    
    6

    và sử dụng các loại myclass.myclass và và foo.bar.yourclass.yourclass.

  • Nên tránh nhập khẩu ký tự đại diện (
    my_list = [
        1, 2, 3,
        4, 5, 6,
    ]
    result = some_function_that_takes_arguments(
        'a', 'b', 'c',
        'd', 'e', 'f',
    )
    
    6), vì chúng làm cho nó không rõ tên nào có trong không gian tên, nhầm lẫn cả người đọc và nhiều công cụ tự động. Có một trường hợp sử dụng có thể phòng thủ để nhập thẻ đại diện, đó là tái xuất bản giao diện nội bộ như một phần của API công khai (ví dụ, ghi đè lên việc triển khai Python thuần túy của giao diện với 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ẽ là Ghi đè không được biết trước).

    Khi xuất bản lại tên theo cách này, các hướng dẫn dưới đây liên quan đến giao diện công cộng và nội bộ vẫn được áp dụng.

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

Mức độ mô -đun, Dunders Dunders (tức là tên có hai dấu gạch dưới và hai dấu gạch ngang), chẳng hạn như

my_list = [
    1, 2, 3,
    4, 5, 6,
]
result = some_function_that_takes_arguments(
    'a', 'b', 'c',
    'd', 'e', 'f',
)
7,
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, v.v. Python bắt buộc rằng các phiên bản 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ừ DocStrings:

import re
import glob
import sys

import requests
import scrapy

from flask import Flask
from my_local_module import MyClass


def top_level_function1():
    pass


def top_level_function2():
    pass


class TestClass(object):
    
    def class_method1():
        pass

    def class_method2():
        pass


class TestClass2(object):
    
    def class2_method1():
        pass

    def class2_method2():
        pass
7

Trích dẫn chuỗi

Trong Python, các chuỗi được trích xuất đơn và chuỗi được trích xuất kép là như nhau. PEP này không đưa ra khuyến nghị cho việc này. Chọn một quy tắc và bám vào 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 chuỗi khác để 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 các chuỗi được trích dẫn ba, luôn sử dụng các ký tự trích dẫn kép để phù hợp với quy ước DocString trong PEP 257.

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

Thói xấu

Tránh khoảng trắng bên ngoài trong các tình huống sau:

  • Ngay bên trong dấu ngoặc đơn, ngoặc hoặc niềng răng:

    import re
    import glob
    import sys
    
    import requests
    import scrapy
    
    from flask import Flask
    from my_local_module import MyClass
    
    
    def top_level_function1():
        pass
    
    
    def top_level_function2():
        pass
    
    
    class TestClass(object):
        
        def class_method1():
            pass
    
        def class_method2():
            pass
    
    
    class TestClass2(object):
        
        def class2_method1():
            pass
    
        def class2_method2():
            pass
    
    8

    import re
    import glob
    import sys
    
    import requests
    import scrapy
    
    from flask import Flask
    from my_local_module import MyClass
    
    
    def top_level_function1():
        pass
    
    
    def top_level_function2():
        pass
    
    
    class TestClass(object):
        
        def class_method1():
            pass
    
        def class_method2():
            pass
    
    
    class TestClass2(object):
        
        def class2_method1():
            pass
    
        def class2_method2():
            pass
    
    9

  • Giữa dấu phẩy kéo dài và dấu ngoặc đơn sau:
  • Ngay trước dấu phẩy, dấu chấm phẩy hoặc đại tràng:

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

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

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

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

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

  • Ngay trước khi dấu ngoặc đơn khởi động danh sách đối số của một cuộc gọi chức năng:
  • Ngay trước dấu ngoặc đơn mở ra một chỉ mục hoặc cắt:

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

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

  • Nhiều hơn một không gian xung quanh một toán tử chuyển nhượng (hoặc khác) để căn chỉnh nó với một toán tử khác:

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

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

Các khuyến nghị khác

  • Tránh kéo theo khoảng trắng ở bất cứ đâu. Bởi vì nó thường vô hình, nó có thể gây nhầm lẫn: ví dụ: Một dấu gạch chéo ngược theo sau là một không gian 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ố biên tập viên don don bảo tồn nó và nhiều dự án (như chính Cpython) có các móc tiền trước từ chối nó.
  • Luôn bao quanh các toán tử nhị phân này với một không gian duy nhất ở hai bên: gá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())
    
    1), gán tăng cường (
    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, v.v.)
    # Wrong:
    # operators sit far away from their operands
    income = (gross_wages +
              taxable_interest +
              (dividends - qualified_dividends) -
              ira_deduction -
              student_loan_interest)
    
    4), Booleans (
    # Wrong:
    # operators sit far away from their operands
    income = (gross_wages +
              taxable_interest +
              (dividends - qualified_dividends) -
              ira_deduction -
              student_loan_interest)
    
    5,
    # Wrong:
    # operators sit far away from their operands
    income = (gross_wages +
              taxable_interest +
              (dividends - qualified_dividends) -
              ira_deduction -
              student_loan_interest)
    
    6,
    # Wrong:
    # operators sit far away from their operands
    income = (gross_wages +
              taxable_interest +
              (dividends - qualified_dividends) -
              ira_deduction -
              student_loan_interest)
    
    7).
  • Nếu các nhà khai thác có cá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 nhà khai thác với mức độ ưu tiên thấp nhất (IES). Sử dụng phán đoán của riêng bạn; Tuy nhiên, không bao giờ sử dụng nhiều hơn một không gian và luôn có cùng một lượng khoảng trắng ở cả hai bên của toán tử nhị phân:

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

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

  • Chú thích chức năng nên sử dụng các quy tắc thông thường cho các dấu chấm và luôn có khoảng trống xung quanh mũi tên
    # Wrong:
    # operators sit far away from their operands
    income = (gross_wages +
              taxable_interest +
              (dividends - qualified_dividends) -
              ira_deduction -
              student_loan_interest)
    
    8 nếu có. (Xem các chú thích chức năng bên dưới để biết thêm về chú thích chức 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)
    
    0

    # 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

  • Don Tiết sử dụng các khoảng trống xung quanh dấu
    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 Khi được sử dụng để chỉ ra đối số từ khóa hoặc khi được sử dụng để chỉ ra giá trị mặc định cho tham số hàm không được bảo 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)
    
    2

    # 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

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

    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:

    # 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

    # 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

  • Các 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:

    # 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

    Thay vì khô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)
    
    7

  • Mặc dù đôi khi, nó có thể đặt một if/for/trong khi có một cơ thể nhỏ trên cùng một dòng, không bao giờ làm điều này cho các câu lệnh đa điểm. Cũng tránh gấp những dòng dài như vậy!

    Thay vì khô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)
    
    8

    Mặc dù đôi khi, nó có thể đặt một if/for/trong khi có một cơ thể nhỏ trên cùng một dòng, không bao giờ làm điều này cho các câu lệnh đa điểm. Cũng tránh gấp những dòng dài như vậ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)
    
    9

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

Khi nào nên sử dụng dấu phẩy kéo dài

Dấu phẩy thường là tùy chọn, ngoại trừ chúng là bắt buộc khi tạo ra một yếu tố. Để rõ ràng, nên bao quanh các dấu ngoặc đơn sau (về mặt kỹ thuật):

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

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

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

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

Đặt tên quy ước

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

Nguyên tắc ghi đè

Các tên có thể nhìn thấy cho người dùng là các phần công khai của API nên tuân theo các quy ước phản ánh việc sử dụng thay vì thực hiện.

Mô tả: Kiểu đặt tên

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

  • Các kiểu đặt tên sau đây thường được phân biệt:
  • import re
    import glob
    import sys
    
    import requests
    import scrapy
    
    from flask import Flask
    from my_local_module import MyClass
    
    
    def top_level_function1():
        pass
    
    
    def top_level_function2():
        pass
    
    
    class TestClass(object):
        
        def class_method1():
            pass
    
        def class_method2():
            pass
    
    
    class TestClass2(object):
        
        def class2_method1():
            pass
    
        def class2_method2():
            pass
    
    01 (chữ thường đơn)
  • import re
    import glob
    import sys
    
    import requests
    import scrapy
    
    from flask import Flask
    from my_local_module import MyClass
    
    
    def top_level_function1():
        pass
    
    
    def top_level_function2():
        pass
    
    
    class TestClass(object):
        
        def class_method1():
            pass
    
        def class_method2():
            pass
    
    
    class TestClass2(object):
        
        def class2_method1():
            pass
    
        def class2_method2():
            pass
    
    03
  • import re
    import glob
    import sys
    
    import requests
    import scrapy
    
    from flask import Flask
    from my_local_module import MyClass
    
    
    def top_level_function1():
        pass
    
    
    def top_level_function2():
        pass
    
    
    class TestClass(object):
        
        def class_method1():
            pass
    
        def class_method2():
            pass
    
    
    class TestClass2(object):
        
        def class2_method1():
            pass
    
        def class2_method2():
            pass
    
    04
  • import re
    import glob
    import sys
    
    import requests
    import scrapy
    
    from flask import Flask
    from my_local_module import MyClass
    
    
    def top_level_function1():
        pass
    
    
    def top_level_function2():
        pass
    
    
    class TestClass(object):
        
        def class_method1():
            pass
    
        def class_method2():
            pass
    
    
    class TestClass2(object):
        
        def class2_method1():
            pass
    
        def class2_method2():
            pass
    
    05
  • import re
    import glob
    import sys
    
    import requests
    import scrapy
    
    from flask import Flask
    from my_local_module import MyClass
    
    
    def top_level_function1():
        pass
    
    
    def top_level_function2():
        pass
    
    
    class TestClass(object):
        
        def class_method1():
            pass
    
        def class_method2():
            pass
    
    
    class TestClass2(object):
        
        def class2_method1():
            pass
    
        def class2_method2():
            pass
    
    06
  • import re
    import glob
    import sys
    
    import requests
    import scrapy
    
    from flask import Flask
    from my_local_module import MyClass
    
    
    def top_level_function1():
        pass
    
    
    def top_level_function2():
        pass
    
    
    class TestClass(object):
        
        def class_method1():
            pass
    
        def class_method2():
            pass
    
    
    class TestClass2(object):
        
        def class2_method1():
            pass
    
        def class2_method2():
            pass
    
    02 (chữ hoa đơn)

    import re
    import glob
    import sys
    
    import requests
    import scrapy
    
    from flask import Flask
    from my_local_module import MyClass
    
    
    def top_level_function1():
        pass
    
    
    def top_level_function2():
        pass
    
    
    class TestClass(object):
        
        def class_method1():
            pass
    
        def class_method2():
            pass
    
    
    class TestClass2(object):
        
        def class2_method1():
            pass
    
        def class2_method2():
            pass
    
    07 (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 của nó [4]). Điều này đôi khi cũng được gọi là nghiên cứu.

  • Lưu ý: Khi sử dụng các từ viết tắt trong Capwords, 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.
  • import re
    import glob
    import sys
    
    import requests
    import scrapy
    
    from flask import Flask
    from my_local_module import MyClass
    
    
    def top_level_function1():
        pass
    
    
    def top_level_function2():
        pass
    
    
    class TestClass(object):
        
        def class_method1():
            pass
    
        def class_method2():
            pass
    
    
    class TestClass2(object):
        
        def class2_method1():
            pass
    
        def class2_method2():
            pass
    
    08 (khác với chữ viết hoa bằng ký tự viết thường ban đầu!)

import re
import glob
import sys

import requests
import scrapy

from flask import Flask
from my_local_module import MyClass


def top_level_function1():
    pass


def top_level_function2():
    pass


class TestClass(object):
    
    def class_method1():
        pass

    def class_method2():
        pass


class TestClass2(object):
    
    def class2_method1():
        pass

    def class2_method2():
        pass
09 (xấu!)

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

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

  • import re
    import glob
    import sys
    
    import requests
    import scrapy
    
    from flask import Flask
    from my_local_module import MyClass
    
    
    def top_level_function1():
        pass
    
    
    def top_level_function2():
        pass
    
    
    class TestClass(object):
        
        def class_method1():
            pass
    
        def class_method2():
            pass
    
    
    class TestClass2(object):
        
        def class2_method1():
            pass
    
        def class2_method2():
            pass
    
    14: Chỉ báo sử dụng nội bộ yếu. Ví dụ.
    import re
    import glob
    import sys
    
    import requests
    import scrapy
    
    from flask import Flask
    from my_local_module import MyClass
    
    
    def top_level_function1():
        pass
    
    
    def top_level_function2():
        pass
    
    
    class TestClass(object):
        
        def class_method1():
            pass
    
        def class_method2():
            pass
    
    
    class TestClass2(object):
        
        def class2_method1():
            pass
    
        def class2_method2():
            pass
    
    15 không nhập các đối tượng có tên bắt đầu bằng dấu gạch dưới.
  • import re
    import glob
    import sys
    
    import requests
    import scrapy
    
    from flask import Flask
    from my_local_module import MyClass
    
    
    def top_level_function1():
        pass
    
    
    def top_level_function2():
        pass
    
    
    class TestClass(object):
        
        def class_method1():
            pass
    
        def class_method2():
            pass
    
    
    class TestClass2(object):
        
        def class2_method1():
            pass
    
        def class2_method2():
            pass
    
    16: Được sử dụng bởi quy ước để tránh xung đột với từ khóa Python, ví dụ:

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

  • import re
    import glob
    import sys
    
    import requests
    import scrapy
    
    from flask import Flask
    from my_local_module import MyClass
    
    
    def top_level_function1():
        pass
    
    
    def top_level_function2():
        pass
    
    
    class TestClass(object):
        
        def class_method1():
            pass
    
        def class_method2():
            pass
    
    
    class TestClass2(object):
        
        def class2_method1():
            pass
    
        def class2_method2():
            pass
    
    17: Khi đặt tên cho một thuộc tính lớp, gọi tên Mangling (bên trong lớp foobar,
    import re
    import glob
    import sys
    
    import requests
    import scrapy
    
    from flask import Flask
    from my_local_module import MyClass
    
    
    def top_level_function1():
        pass
    
    
    def top_level_function2():
        pass
    
    
    class TestClass(object):
        
        def class_method1():
            pass
    
        def class_method2():
            pass
    
    
    class TestClass2(object):
        
        def class2_method1():
            pass
    
        def class2_method2():
            pass
    
    18 trở thành
    import re
    import glob
    import sys
    
    import requests
    import scrapy
    
    from flask import Flask
    from my_local_module import MyClass
    
    
    def top_level_function1():
        pass
    
    
    def top_level_function2():
        pass
    
    
    class TestClass(object):
        
        def class_method1():
            pass
    
        def class_method2():
            pass
    
    
    class TestClass2(object):
        
        def class2_method1():
            pass
    
        def class2_method2():
            pass
    
    19; xem bên dưới).
  • import re
    import glob
    import sys
    
    import requests
    import scrapy
    
    from flask import Flask
    from my_local_module import MyClass
    
    
    def top_level_function1():
        pass
    
    
    def top_level_function2():
        pass
    
    
    class TestClass(object):
        
        def class_method1():
            pass
    
        def class_method2():
            pass
    
    
    class TestClass2(object):
        
        def class2_method1():
            pass
    
        def class2_method2():
            pass
    
    20: Các đối tượng hoặc thuộc tính của Magic Magic sống trong các không gian tên do người dùng điều khiển. Ví dụ.
    import re
    import glob
    import sys
    
    import requests
    import scrapy
    
    from flask import Flask
    from my_local_module import MyClass
    
    
    def top_level_function1():
        pass
    
    
    def top_level_function2():
        pass
    
    
    class TestClass(object):
        
        def class_method1():
            pass
    
        def class_method2():
            pass
    
    
    class TestClass2(object):
        
        def class2_method1():
            pass
    
        def class2_method2():
            pass
    
    21,
    import re
    import glob
    import sys
    
    import requests
    import scrapy
    
    from flask import Flask
    from my_local_module import MyClass
    
    
    def top_level_function1():
        pass
    
    
    def top_level_function2():
        pass
    
    
    class TestClass(object):
        
        def class_method1():
            pass
    
        def class_method2():
            pass
    
    
    class TestClass2(object):
        
        def class2_method1():
            pass
    
        def class2_method2():
            pass
    
    22 hoặc
    import re
    import glob
    import sys
    
    import requests
    import scrapy
    
    from flask import Flask
    from my_local_module import MyClass
    
    
    def top_level_function1():
        pass
    
    
    def top_level_function2():
        pass
    
    
    class TestClass(object):
        
        def class_method1():
            pass
    
        def class_method2():
            pass
    
    
    class TestClass2(object):
        
        def class2_method1():
            pass
    
        def class2_method2():
            pass
    
    23. Không bao giờ phát minh ra những cái tên như vậy; Chỉ sử dụng chúng như tài liệu.

Quy định: Đặt tên quy ước

Tên cần tránh

Không bao giờ sử dụng các ký tự ’Lát (chữ thường el),‘ O, (chữ hoa oh) hoặc ‘I, (mắt chữ hoa) 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 số một và không. Khi bị cám dỗ sử dụng ‘L, hãy sử dụng‘ L, thay vào đó.

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

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

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

Các mô-đun nên có tên ngắn, toàn bộ. 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 nên có tên ngắn, toàn bộ, 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ô -đun Python đi kèm cung cấp giao diện cấp cao hơn (ví dụ: định hướng đối tượng hơn), mô -đun C/C ++ có dấu gạch dưới hàng đầu (ví dụ:

import re
import glob
import sys

import requests
import scrapy

from flask import Flask
from my_local_module import MyClass


def top_level_function1():
    pass


def top_level_function2():
    pass


class TestClass(object):
    
    def class_method1():
        pass

    def class_method2():
        pass


class TestClass2(object):
    
    def class2_method1():
        pass

    def class2_method2():
        pass
24).

Tên lớp

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

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

Lưu ý rằng có một quy ước riêng cho các tên tích hợp: hầu hết các tên được xây dựng 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ố tích hợp.

Nhập tên biến

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

import re
import glob
import sys

import requests
import scrapy

from flask import Flask
from my_local_module import MyClass


def top_level_function1():
    pass


def top_level_function2():
    pass


class TestClass(object):
    
    def class_method1():
        pass

    def class_method2():
        pass


class TestClass2(object):
    
    def class2_method1():
        pass

    def class2_method2():
        pass
25,
import re
import glob
import sys

import requests
import scrapy

from flask import Flask
from my_local_module import MyClass


def top_level_function1():
    pass


def top_level_function2():
    pass


class TestClass(object):
    
    def class_method1():
        pass

    def class_method2():
        pass


class TestClass2(object):
    
    def class2_method1():
        pass

    def class2_method2():
        pass
26,
import re
import glob
import sys

import requests
import scrapy

from flask import Flask
from my_local_module import MyClass


def top_level_function1():
    pass


def top_level_function2():
    pass


class TestClass(object):
    
    def class_method1():
        pass

    def class_method2():
        pass


class TestClass2(object):
    
    def class2_method1():
        pass

    def class2_method2():
        pass
27. Nên thêm hậu tố
import re
import glob
import sys

import requests
import scrapy

from flask import Flask
from my_local_module import MyClass


def top_level_function1():
    pass


def top_level_function2():
    pass


class TestClass(object):
    
    def class_method1():
        pass

    def class_method2():
        pass


class TestClass2(object):
    
    def class2_method1():
        pass

    def class2_method2():
        pass
28 hoặc
import re
import glob
import sys

import requests
import scrapy

from flask import Flask
from my_local_module import MyClass


def top_level_function1():
    pass


def top_level_function2():
    pass


class TestClass(object):
    
    def class_method1():
        pass

    def class_method2():
        pass


class TestClass2(object):
    
    def class2_method1():
        pass

    def class2_method2():
        pass
29 vào các biến được sử dụng để khai báo hành vi đồng biến hoặc trái ngược tương ứng:

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

Tên ngoại lệ

Bởi vì các trường hợp ngoại lệ nên 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 lỗi hậu tố lỗi trên tên ngoại lệ của bạn (nếu ngoại lệ thực sự là một lỗi).

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

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

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

import re
import glob
import sys

import requests
import scrapy

from flask import Flask
from my_local_module import MyClass


def top_level_function1():
    pass


def top_level_function2():
    pass


class TestClass(object):
    
    def class_method1():
        pass

    def class_method2():
        pass


class TestClass2(object):
    
    def class2_method1():
        pass

    def class2_method2():
        pass
15 nên sử dụng cơ chế
my_list = [
    1, 2, 3,
    4, 5, 6,
]
result = some_function_that_takes_arguments(
    'a', 'b', 'c',
    'd', 'e', 'f',
)
7 để ngăn chặn xuất khẩu toàn cầu hoặc sử dụng quy ước cũ của tiền tố như vậy với một dấu gạch dưới (mà bạn có thể muốn làm để chỉ ra những thế giới này là mô-đun không công khai).

Tên chức năng và tên biến

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

Tên biến theo cùng một quy ước với tên chức năng.

Mixedcase chỉ được phép trong các bối cảnh mà đó đã là kiểu phổ biến (ví dụ: Threading.py), để giữ lại khả năng tương thích ngược.

Các đối số chức năng và phương thức

Luôn luôn sử dụng

import re
import glob
import sys

import requests
import scrapy

from flask import Flask
from my_local_module import MyClass


def top_level_function1():
    pass


def top_level_function2():
    pass


class TestClass(object):
    
    def class_method1():
        pass

    def class_method2():
        pass


class TestClass2(object):
    
    def class2_method1():
        pass

    def class2_method2():
        pass
32 cho đối số đầu tiên cho các phương thức thể hiện.

Luôn luôn sử dụng

import re
import glob
import sys

import requests
import scrapy

from flask import Flask
from my_local_module import MyClass


def top_level_function1():
    pass


def top_level_function2():
    pass


class TestClass(object):
    
    def class_method1():
        pass

    def class_method2():
        pass


class TestClass2(object):
    
    def class2_method1():
        pass

    def class2_method2():
        pass
33 cho đối số đầu tiên cho các phương thức lớp.

Nếu một đối số chức năng Tên tên xung đột với một từ khóa dành riêng, thì tốt hơn là nên nối một dấu gạch ngang duy nhất thay vì sử dụng viết tắt hoặc tham nhũng chính tả. Do đó

import re
import glob
import sys

import requests
import scrapy

from flask import Flask
from my_local_module import MyClass


def top_level_function1():
    pass


def top_level_function2():
    pass


class TestClass(object):
    
    def class_method1():
        pass

    def class_method2():
        pass


class TestClass2(object):
    
    def class2_method1():
        pass

    def class2_method2():
        pass
34 tốt hơn
import re
import glob
import sys

import requests
import scrapy

from flask import Flask
from my_local_module import MyClass


def top_level_function1():
    pass


def top_level_function2():
    pass


class TestClass(object):
    
    def class_method1():
        pass

    def class_method2():
        pass


class TestClass2(object):
    
    def class2_method1():
        pass

    def class2_method2():
        pass
35. (Có lẽ tốt hơn là tránh các cuộc đụng độ như vậy bằng cách sử dụng từ đồng nghĩa.)

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

Sử dụng các quy tắc đặt tên chức năng: 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.

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

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

Python mang các tên này với tên lớp: Nếu lớp foo có thuộc tính có tên

import re
import glob
import sys

import requests
import scrapy

from flask import Flask
from my_local_module import MyClass


def top_level_function1():
    pass


def top_level_function2():
    pass


class TestClass(object):
    
    def class_method1():
        pass

    def class_method2():
        pass


class TestClass2(object):
    
    def class2_method1():
        pass

    def class2_method2():
        pass
36, nó không thể được truy cập bởi
import re
import glob
import sys

import requests
import scrapy

from flask import Flask
from my_local_module import MyClass


def top_level_function1():
    pass


def top_level_function2():
    pass


class TestClass(object):
    
    def class_method1():
        pass

    def class_method2():
        pass


class TestClass2(object):
    
    def class2_method1():
        pass

    def class2_method2():
        pass
37. .

Lưu ý: Có một số tranh cãi về việc sử dụng __names (xem bên dưới).

Hằng số

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

import re
import glob
import sys

import requests
import scrapy

from flask import Flask
from my_local_module import MyClass


def top_level_function1():
    pass


def top_level_function2():
    pass


class TestClass(object):
    
    def class_method1():
        pass

    def class_method2():
        pass


class TestClass2(object):
    
    def class2_method1():
        pass

    def class2_method2():
        pass
39 và
import re
import glob
import sys

import requests
import scrapy

from flask import Flask
from my_local_module import MyClass


def top_level_function1():
    pass


def top_level_function2():
    pass


class TestClass(object):
    
    def class_method1():
        pass

    def class_method2():
        pass


class TestClass2(object):
    
    def class2_method1():
        pass

    def class2_method2():
        pass
40.

Thiết kế cho thừa kế

Luôn quyết định xem các phương thức và biến thể hiện của lớp (gọi chung là: thuộc tính của người Hồi giáo) nên được công khai hoặc không công khai. Nếu nghi ngờ, chọn không công khai; Nó dễ dàng hơn để công khai muộn hơn là làm cho một thuộc tính công khai không công khai.

Các thuộc tính công khai là những thuộc tính mà bạn mong đợi các máy khách không liên quan trong lớp của bạn sẽ sử dụng, với cam kết của bạn để tránh những 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 được sử dụng bởi các bên thứ ba; Bạn không đảm bảo rằng các thuộc tính không công khai đã giành được sự thay đổi hoặc thậm chí bị xóa.

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 nói chung không cần thiết).

Một loại thuộc tính khác là một phần của API phân lớp con (thường được gọi là bảo vệ trực tuyến trong các ngôn ngữ khác). Một số lớp được thiết kế để được kế thừa, để mở rộng hoặc sửa đổi các khía cạnh của hành vi lớp học. 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ề các thuộc tính nào là công khai, là một phần của API phân lớp và 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à các hướng dẫn Pythonic:

  • Các thuộc tính công cộng nên không có dấu gạch dưới hàng đầu.
  • Nếu tên thuộc tính công khai của bạn va chạm với một từ khóa dành riêng, hãy nối một dấu ngoặc đơn nhấn mạnh 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 chính tả bị hỏng. .

    Lưu ý 1: Xem đề xuất tên đối số ở trên cho 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 mà không có các phương thức accessor/đột biến phức tạp. Hãy nhớ rằng Python cung cấp một con đường dễ dàng để tăng cường 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 đó, sử dụng các thuộc tính để ẩn 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 miễn phí tác dụng phụ, mặc dù các tác dụng phụ như bộ nhớ đệm nói chung là tốt.

    Lưu ý 2: Tránh sử dụng các thuộc tính cho các hoạt động tốn kém về mặt tính toán; Ký hiệu thuộc tính làm cho người gọi tin rằng quyền truy cập (tương đối) rẻ.

  • Nếu lớp của bạn được dự định sẽ được phân nhóm 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 xem xét việc đặt tên chúng bằng các dấu gạch dưới hàng đầu và không có dấu gạch dưới. Điều này gọi thuật toán mang tên Python, trong đó tên của lớp được đưa vào tên thuộc tính. Điều này giúp tránh các vụ va chạm tên thuộc tính nên 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ỉ có tên lớp đơn giản được sử dụng trong tên bị xáo trộn, vì vậy nếu một lớp con chọn cả cùng tên lớp và tên thuộc tính, bạn vẫn có thể có được sự va chạm tên.

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

    import re
    import glob
    import sys
    
    import requests
    import scrapy
    
    from flask import Flask
    from my_local_module import MyClass
    
    
    def top_level_function1():
        pass
    
    
    def top_level_function2():
        pass
    
    
    class TestClass(object):
        
        def class_method1():
            pass
    
        def class_method2():
            pass
    
    
    class TestClass2(object):
        
        def class2_method1():
            pass
    
        def class2_method2():
            pass
    
    41, ít thuận tiện hơn. Tuy nhiên, tên thuật toán mang tên được ghi lại tốt và dễ thực hiện bằng tay.

    Lưu ý 3: Không phải ai cũng thích tên Mangling. Cố gắng cân bằng sự cần thiết phải tránh các cuộc đụng độ tên ngẫu nhiên với khả năng sử dụng của những người gọi nâng cao.

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

Bất kỳ đảm bảo khả năng tương thích ngược chỉ áp dụng cho 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 các giao diện công cộng và nội bộ.

Các giao diện được ghi nhận đượ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 khả năng 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ợ nội tâm tốt hơn, các mô -đun nên khai báo rõ ràng các tên trong API công khai của họ bằng thuộc tính

my_list = [
    1, 2, 3,
    4, 5, 6,
]
result = some_function_that_takes_arguments(
    'a', 'b', 'c',
    'd', 'e', 'f',
)
7. Đặt
my_list = [
    1, 2, 3,
    4, 5, 6,
]
result = some_function_that_takes_arguments(
    'a', 'b', 'c',
    'd', 'e', 'f',
)
7 thành một danh sách trống cho thấy mô -đun không có API công khai.

Ngay cả với

my_list = [
    1, 2, 3,
    4, 5, 6,
]
result = some_function_that_takes_arguments(
    'a', 'b', 'c',
    'd', 'e', 'f',
)
7 được thiết lập một cách thích hợp, các giao diện nội bộ (gói, mô -đun, lớp, chức năng, thuộc tính hoặc tên khác) vẫn nên được đặt trước với một dấu gạch dưới hàng đầu.

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

Tên nhập khẩu phải luôn được coi là một chi tiết thực hiện. 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 như vậy trừ khi chúng là một phần được ghi chép rõ ràng của API mô -đun có chứa API, chẳng hạn như

import re
import glob
import sys

import requests
import scrapy

from flask import Flask
from my_local_module import MyClass


def top_level_function1():
    pass


def top_level_function2():
    pass


class TestClass(object):
    
    def class_method1():
        pass

    def class_method2():
        pass


class TestClass2(object):
    
    def class2_method1():
        pass

    def class2_method2():
        pass
45 hoặc một gói mô -đun
import re
import glob
import sys

import requests
import scrapy

from flask import Flask
from my_local_module import MyClass


def top_level_function1():
    pass


def top_level_function2():
    pass


class TestClass(object):
    
    def class_method1():
        pass

    def class_method2():
        pass


class TestClass2(object):
    
    def class2_method1():
        pass

    def class2_method2():
        pass
21 của gói hiển thị chức năng từ các mô hình con.

Khuyến nghị lập trình

  • Mã nên được viết theo cách không gây bất lợi cho các triển khai khác của Python (Pypy, Jython, Ironpython, Cython, Psyco, và như vậy).

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

    import re
    import glob
    import sys
    
    import requests
    import scrapy
    
    from flask import Flask
    from my_local_module import MyClass
    
    
    def top_level_function1():
        pass
    
    
    def top_level_function2():
        pass
    
    
    class TestClass(object):
        
        def class_method1():
            pass
    
        def class_method2():
            pass
    
    
    class TestClass2(object):
        
        def class2_method1():
            pass
    
        def class2_method2():
            pass
    
    47 hoặc
    import re
    import glob
    import sys
    
    import requests
    import scrapy
    
    from flask import Flask
    from my_local_module import MyClass
    
    
    def top_level_function1():
        pass
    
    
    def top_level_function2():
        pass
    
    
    class TestClass(object):
        
        def class_method1():
            pass
    
        def class_method2():
            pass
    
    
    class TestClass2(object):
        
        def class2_method1():
            pass
    
        def class2_method2():
            pass
    
    48. Tối ưu hóa này rất mong manh ngay cả trong Cpython (nó chỉ hoạt động cho một số loại) và có mặt ở tất cả các triển khai mà don don sử dụng refcounting. Trong các phần nhạy cảm hiệu suất của thư viện, mẫu
    import re
    import glob
    import sys
    
    import requests
    import scrapy
    
    from flask import Flask
    from my_local_module import MyClass
    
    
    def top_level_function1():
        pass
    
    
    def top_level_function2():
        pass
    
    
    class TestClass(object):
        
        def class_method1():
            pass
    
        def class_method2():
            pass
    
    
    class TestClass2(object):
        
        def class2_method1():
            pass
    
        def class2_method2():
            pass
    
    49 nên được sử dụng thay thế. Điều này sẽ đảm bảo rằng sự kết hợp xảy ra trong thời gian tuyến tính trên các triển khai khác nhau.

  • 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:
    # operators sit far away from their operands
    income = (gross_wages +
              taxable_interest +
              (dividends - qualified_dividends) -
              ira_deduction -
              student_loan_interest)
    
    3 hoặc
    # Wrong:
    # operators sit far away from their operands
    income = (gross_wages +
              taxable_interest +
              (dividends - qualified_dividends) -
              ira_deduction -
              student_loan_interest)
    
    4, không bao giờ là nhà khai thác bình đẳng.

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

    import re
    import glob
    import sys
    
    import requests
    import scrapy
    
    from flask import Flask
    from my_local_module import MyClass
    
    
    def top_level_function1():
        pass
    
    
    def top_level_function2():
        pass
    
    
    class TestClass(object):
        
        def class_method1():
            pass
    
        def class_method2():
            pass
    
    
    class TestClass2(object):
        
        def class2_method1():
            pass
    
        def class2_method2():
            pass
    
    52 khi bạn thực sự có nghĩa là
    import re
    import glob
    import sys
    
    import requests
    import scrapy
    
    from flask import Flask
    from my_local_module import MyClass
    
    
    def top_level_function1():
        pass
    
    
    def top_level_function2():
        pass
    
    
    class TestClass(object):
        
        def class_method1():
            pass
    
        def class_method2():
            pass
    
    
    class TestClass2(object):
        
        def class2_method1():
            pass
    
        def class2_method2():
            pass
    
    53 - ví dụ: Khi kiểm tra xem một biến hoặc đối số mặc định là không có được đặt ở một số giá trị khác. Giá trị khác có thể có một loại (chẳng hạn như một thùng chứa) có thể sai trong bối cảnh boolean!

  • Sử dụng toán tử
    # Wrong:
    # operators sit far away from their operands
    income = (gross_wages +
              taxable_interest +
              (dividends - qualified_dividends) -
              ira_deduction -
              student_loan_interest)
    
    4 thay vì
    import re
    import glob
    import sys
    
    import requests
    import scrapy
    
    from flask import Flask
    from my_local_module import MyClass
    
    
    def top_level_function1():
        pass
    
    
    def top_level_function2():
        pass
    
    
    class TestClass(object):
        
        def class_method1():
            pass
    
        def class_method2():
            pass
    
    
    class TestClass2(object):
        
        def class2_method1():
            pass
    
        def class2_method2():
            pass
    
    55. Mặc dù cả hai biểu thức đều giống hệt nhau về mặt chức năng, nhưng trước đây dễ đọc và ưa thích hơn:

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

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

  • Khi thực hiện các hoạt động đặt hàng với các so sánh phong phú, tốt nhất là thực hiện tất cả sáu hoạt động (
    import re
    import glob
    import sys
    
    import requests
    import scrapy
    
    from flask import Flask
    from my_local_module import MyClass
    
    
    def top_level_function1():
        pass
    
    
    def top_level_function2():
        pass
    
    
    class TestClass(object):
        
        def class_method1():
            pass
    
        def class_method2():
            pass
    
    
    class TestClass2(object):
        
        def class2_method1():
            pass
    
        def class2_method2():
            pass
    
    56,
    import re
    import glob
    import sys
    
    import requests
    import scrapy
    
    from flask import Flask
    from my_local_module import MyClass
    
    
    def top_level_function1():
        pass
    
    
    def top_level_function2():
        pass
    
    
    class TestClass(object):
        
        def class_method1():
            pass
    
        def class_method2():
            pass
    
    
    class TestClass2(object):
        
        def class2_method1():
            pass
    
        def class2_method2():
            pass
    
    57,
    import re
    import glob
    import sys
    
    import requests
    import scrapy
    
    from flask import Flask
    from my_local_module import MyClass
    
    
    def top_level_function1():
        pass
    
    
    def top_level_function2():
        pass
    
    
    class TestClass(object):
        
        def class_method1():
            pass
    
        def class_method2():
            pass
    
    
    class TestClass2(object):
        
        def class2_method1():
            pass
    
        def class2_method2():
            pass
    
    58,
    import re
    import glob
    import sys
    
    import requests
    import scrapy
    
    from flask import Flask
    from my_local_module import MyClass
    
    
    def top_level_function1():
        pass
    
    
    def top_level_function2():
        pass
    
    
    class TestClass(object):
        
        def class_method1():
            pass
    
        def class_method2():
            pass
    
    
    class TestClass2(object):
        
        def class2_method1():
            pass
    
        def class2_method2():
            pass
    
    59,
    import re
    import glob
    import sys
    
    import requests
    import scrapy
    
    from flask import Flask
    from my_local_module import MyClass
    
    
    def top_level_function1():
        pass
    
    
    def top_level_function2():
        pass
    
    
    class TestClass(object):
        
        def class_method1():
            pass
    
        def class_method2():
            pass
    
    
    class TestClass2(object):
        
        def class2_method1():
            pass
    
        def class2_method2():
            pass
    
    60,
    import re
    import glob
    import sys
    
    import requests
    import scrapy
    
    from flask import Flask
    from my_local_module import MyClass
    
    
    def top_level_function1():
        pass
    
    
    def top_level_function2():
        pass
    
    
    class TestClass(object):
        
        def class_method1():
            pass
    
        def class_method2():
            pass
    
    
    class TestClass2(object):
        
        def class2_method1():
            pass
    
        def class2_method2():
            pass
    
    61) 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, bộ trang trí

    import re
    import glob
    import sys
    
    import requests
    import scrapy
    
    from flask import Flask
    from my_local_module import MyClass
    
    
    def top_level_function1():
        pass
    
    
    def top_level_function2():
        pass
    
    
    class TestClass(object):
        
        def class_method1():
            pass
    
        def class_method2():
            pass
    
    
    class TestClass2(object):
        
        def class2_method1():
            pass
    
        def class2_method2():
            pass
    
    62 cung cấp một công cụ để tạo ra các phương pháp so sánh bị thiếu.

    PEP 207 chỉ ra rằng các quy tắc phản xạ được giả định bởi Python. Do đó, trình thông dịch có thể trao đổi

    import re
    import glob
    import sys
    
    import requests
    import scrapy
    
    from flask import Flask
    from my_local_module import MyClass
    
    
    def top_level_function1():
        pass
    
    
    def top_level_function2():
        pass
    
    
    class TestClass(object):
        
        def class_method1():
            pass
    
        def class_method2():
            pass
    
    
    class TestClass2(object):
        
        def class2_method1():
            pass
    
        def class2_method2():
            pass
    
    63 với
    import re
    import glob
    import sys
    
    import requests
    import scrapy
    
    from flask import Flask
    from my_local_module import MyClass
    
    
    def top_level_function1():
        pass
    
    
    def top_level_function2():
        pass
    
    
    class TestClass(object):
        
        def class_method1():
            pass
    
        def class_method2():
            pass
    
    
    class TestClass2(object):
        
        def class2_method1():
            pass
    
        def class2_method2():
            pass
    
    64,
    import re
    import glob
    import sys
    
    import requests
    import scrapy
    
    from flask import Flask
    from my_local_module import MyClass
    
    
    def top_level_function1():
        pass
    
    
    def top_level_function2():
        pass
    
    
    class TestClass(object):
        
        def class_method1():
            pass
    
        def class_method2():
            pass
    
    
    class TestClass2(object):
        
        def class2_method1():
            pass
    
        def class2_method2():
            pass
    
    65 với
    import re
    import glob
    import sys
    
    import requests
    import scrapy
    
    from flask import Flask
    from my_local_module import MyClass
    
    
    def top_level_function1():
        pass
    
    
    def top_level_function2():
        pass
    
    
    class TestClass(object):
        
        def class_method1():
            pass
    
        def class_method2():
            pass
    
    
    class TestClass2(object):
        
        def class2_method1():
            pass
    
        def class2_method2():
            pass
    
    66 và có thể trao đổi các đối số của
    import re
    import glob
    import sys
    
    import requests
    import scrapy
    
    from flask import Flask
    from my_local_module import MyClass
    
    
    def top_level_function1():
        pass
    
    
    def top_level_function2():
        pass
    
    
    class TestClass(object):
        
        def class_method1():
            pass
    
        def class_method2():
            pass
    
    
    class TestClass2(object):
        
        def class2_method1():
            pass
    
        def class2_method2():
            pass
    
    67 và
    import re
    import glob
    import sys
    
    import requests
    import scrapy
    
    from flask import Flask
    from my_local_module import MyClass
    
    
    def top_level_function1():
        pass
    
    
    def top_level_function2():
        pass
    
    
    class TestClass(object):
        
        def class_method1():
            pass
    
        def class_method2():
            pass
    
    
    class TestClass2(object):
        
        def class2_method1():
            pass
    
        def class2_method2():
            pass
    
    68. Các hoạt động
    import re
    import glob
    import sys
    
    import requests
    import scrapy
    
    from flask import Flask
    from my_local_module import MyClass
    
    
    def top_level_function1():
        pass
    
    
    def top_level_function2():
        pass
    
    
    class TestClass(object):
        
        def class_method1():
            pass
    
        def class_method2():
            pass
    
    
    class TestClass2(object):
        
        def class2_method1():
            pass
    
        def class2_method2():
            pass
    
    69 và
    import re
    import glob
    import sys
    
    import requests
    import scrapy
    
    from flask import Flask
    from my_local_module import MyClass
    
    
    def top_level_function1():
        pass
    
    
    def top_level_function2():
        pass
    
    
    class TestClass(object):
        
        def class_method1():
            pass
    
        def class_method2():
            pass
    
    
    class TestClass2(object):
        
        def class2_method1():
            pass
    
        def class2_method2():
            pass
    
    70 được đảm bảo sử dụng toán tử
    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 và hàm
    import re
    import glob
    import sys
    
    import requests
    import scrapy
    
    from flask import Flask
    from my_local_module import MyClass
    
    
    def top_level_function1():
        pass
    
    
    def top_level_function2():
        pass
    
    
    class TestClass(object):
        
        def class_method1():
            pass
    
        def class_method2():
            pass
    
    
    class TestClass2(object):
        
        def class2_method1():
            pass
    
        def class2_method2():
            pass
    
    72 sử dụng toán tử
    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. Tuy nhiên, tốt nhất là thực hiện tất cả sáu hoạt động để sự nhầm lẫn không phát sinh trong các bối 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 biểu thức Lambda trực tiếp với định danh:

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

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

    Biểu mẫu đầu tiên có nghĩa là tên của đối tượng chức năng kết quả cụ thể là ‘f, thay vì chung chung. Điều này hữu ích hơn cho các dấu vết và biểu diễn chuỗi nói chung. Việc sử dụng câu lệnh gán loại bỏ lợi ích duy nhất mà biểu thức Lambda có thể cung cấp trên một tuyên bố DEF rõ ràng (nghĩa là nó có thể được nhúng bên trong một biểu thức lớn hơn)

  • Xuất hiện ngoại lệ từ
    import re
    import glob
    import sys
    
    import requests
    import scrapy
    
    from flask import Flask
    from my_local_module import MyClass
    
    
    def top_level_function1():
        pass
    
    
    def top_level_function2():
        pass
    
    
    class TestClass(object):
        
        def class_method1():
            pass
    
        def class_method2():
            pass
    
    
    class TestClass2(object):
        
        def class2_method1():
            pass
    
        def class2_method2():
            pass
    
    74 chứ không phải
    import re
    import glob
    import sys
    
    import requests
    import scrapy
    
    from flask import Flask
    from my_local_module import MyClass
    
    
    def top_level_function1():
        pass
    
    
    def top_level_function2():
        pass
    
    
    class TestClass(object):
        
        def class_method1():
            pass
    
        def class_method2():
            pass
    
    
    class TestClass2(object):
        
        def class2_method1():
            pass
    
        def class2_method2():
            pass
    
    75. Kế thừa trực tiếp từ
    import re
    import glob
    import sys
    
    import requests
    import scrapy
    
    from flask import Flask
    from my_local_module import MyClass
    
    
    def top_level_function1():
        pass
    
    
    def top_level_function2():
        pass
    
    
    class TestClass(object):
        
        def class_method1():
            pass
    
        def class_method2():
            pass
    
    
    class TestClass2(object):
        
        def class2_method1():
            pass
    
        def class2_method2():
            pass
    
    75 được dành riêng cho các trường hợp ngoại lệ trong đó việc bắt chúng hầu như luôn 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 rằng mã bắt các ngoại lệ có thể cần, thay vì các vị trí nơi các trường hợp ngoại lệ được nêu ra. Nhằm mục đích trả lời câu hỏi "Điều gì đã xảy ra?" Về mặt chương trình, thay vì chỉ nói rằng, một vấn đề đã xảy ra (xem PEP 3151 để biết ví dụ về bài học này được học cho hệ thống phân cấp ngoại lệ tích hợp)

    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 lỗi vào các lớp ngoại lệ của bạn nếu ngoại lệ là lỗi. Các ngoại lệ không lỗi được sử dụng để kiểm soát dòng không địa phương hoặc các hình thức tín 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.
    import re
    import glob
    import sys
    
    import requests
    import scrapy
    
    from flask import Flask
    from my_local_module import MyClass
    
    
    def top_level_function1():
        pass
    
    
    def top_level_function2():
        pass
    
    
    class TestClass(object):
        
        def class_method1():
            pass
    
        def class_method2():
            pass
    
    
    class TestClass2(object):
        
        def class2_method1():
            pass
    
        def class2_method2():
            pass
    
    77 nên được sử dụng để chỉ ra sự thay thế rõ ràng mà không 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

    import re
    import glob
    import sys
    
    import requests
    import scrapy
    
    from flask import Flask
    from my_local_module import MyClass
    
    
    def top_level_function1():
        pass
    
    
    def top_level_function2():
        pass
    
    
    class TestClass(object):
        
        def class_method1():
            pass
    
        def class_method2():
            pass
    
    
    class TestClass2(object):
        
        def class2_method1():
            pass
    
        def class2_method2():
            pass
    
    78), hãy đảm bảo rằng các chi tiết có liên quan được chuyển sang ngoại lệ mới (chẳng hạn như bảo tồn tên thuộc tính khi chuyển đổi KeyError thành thuộc tính hoặc nhúng văn bản của ngoại lệ ban đầu trong thông báo ngoại lệ mới).

  • Khi bắt các 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 đề trần
    import re
    import glob
    import sys
    
    import requests
    import scrapy
    
    from flask import Flask
    from my_local_module import MyClass
    
    
    def top_level_function1():
        pass
    
    
    def top_level_function2():
        pass
    
    
    class TestClass(object):
        
        def class_method1():
            pass
    
        def class_method2():
            pass
    
    
    class TestClass2(object):
        
        def class2_method1():
            pass
    
        def class2_method2():
            pass
    
    79:

    # 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

    Một điều khoản trần trụi

    import re
    import glob
    import sys
    
    import requests
    import scrapy
    
    from flask import Flask
    from my_local_module import MyClass
    
    
    def top_level_function1():
        pass
    
    
    def top_level_function2():
        pass
    
    
    class TestClass(object):
        
        def class_method1():
            pass
    
        def class_method2():
            pass
    
    
    class TestClass2(object):
        
        def class2_method1():
            pass
    
        def class2_method2():
            pass
    
    79 sẽ bắt được các ngoại lệ của SystemExit và bàn phím, khiến việc làm gián đoạn một chương trình với Control-C và có thể ngụy trang các vấn đề khác khó khăn hơn. Nếu bạn muốn bắt tất cả các ngoại lệ mà các lỗi của chương trình tín hiệu, hãy sử dụng
    import re
    import glob
    import sys
    
    import requests
    import scrapy
    
    from flask import Flask
    from my_local_module import MyClass
    
    
    def top_level_function1():
        pass
    
    
    def top_level_function2():
        pass
    
    
    class TestClass(object):
        
        def class_method1():
            pass
    
        def class_method2():
            pass
    
    
    class TestClass2(object):
        
        def class2_method1():
            pass
    
        def class2_method2():
            pass
    
    81 (trần ngoại trừ tương đương với
    import re
    import glob
    import sys
    
    import requests
    import scrapy
    
    from flask import Flask
    from my_local_module import MyClass
    
    
    def top_level_function1():
        pass
    
    
    def top_level_function2():
        pass
    
    
    class TestClass(object):
        
        def class_method1():
            pass
    
        def class_method2():
            pass
    
    
    class TestClass2(object):
        
        def class2_method1():
            pass
    
        def class2_method2():
            pass
    
    82).

    Một quy tắc tốt là giới hạn việc sử dụng các mệnh đề trần trụi ngoại trừ hai trường hợp:

    1. Nếu trình xử lý ngoại lệ sẽ được in ra hoặc ghi lại dấu vết; Ít nhất người dùng sẽ biết rằng đã xảy ra lỗi.
    2. Nếu mã cần thực hiện một số công việc dọn dẹp, nhưng sau đó cho phép ngoại lệ tuyên truyền lên trên với
      import re
      import glob
      import sys
      
      import requests
      import scrapy
      
      from flask import Flask
      from my_local_module import MyClass
      
      
      def top_level_function1():
          pass
      
      
      def top_level_function2():
          pass
      
      
      class TestClass(object):
          
          def class_method1():
              pass
      
          def class_method2():
              pass
      
      
      class TestClass2(object):
          
          def class2_method1():
              pass
      
          def class2_method2():
              pass
      
      83.
      import re
      import glob
      import sys
      
      import requests
      import scrapy
      
      from flask import Flask
      from my_local_module import MyClass
      
      
      def top_level_function1():
          pass
      
      
      def top_level_function2():
          pass
      
      
      class TestClass(object):
          
          def class_method1():
              pass
      
          def class_method2():
              pass
      
      
      class TestClass2(object):
          
          def class2_method1():
              pass
      
          def class2_method2():
              pass
      
      84 có thể là một cách tốt hơn để xử lý trường hợp này.
  • Khi bắt các lỗi hệ điều hành, thích hệ thống phân cấp ngoại lệ rõ ràng được giới thiệu trong Python 3.3 hơn nội tâm của các giá trị
    import re
    import glob
    import sys
    
    import requests
    import scrapy
    
    from flask import Flask
    from my_local_module import MyClass
    
    
    def top_level_function1():
        pass
    
    
    def top_level_function2():
        pass
    
    
    class TestClass(object):
        
        def class_method1():
            pass
    
        def class_method2():
            pass
    
    
    class TestClass2(object):
        
        def class2_method1():
            pass
    
        def class2_method2():
            pass
    
    85.
  • Ngoài ra, đối với tất cả các thử nghiệm/ngoại trừ các điều khoản, giới hạn mệnh đề
    import re
    import glob
    import sys
    
    import requests
    import scrapy
    
    from flask import Flask
    from my_local_module import MyClass
    
    
    def top_level_function1():
        pass
    
    
    def top_level_function2():
        pass
    
    
    class TestClass(object):
        
        def class_method1():
            pass
    
        def class_method2():
            pass
    
    
    class TestClass2(object):
        
        def class2_method1():
            pass
    
        def class2_method2():
            pass
    
    86 ở mức tối thiểu tuyệt đối của mã cần thiết. Một lần nữa, điều này tránh được các lỗi che giấu:

    # 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

  • Khi một tài nguyên là cục bộ cho một phần mã cụ thể, hãy sử dụng câu lệnh
    my_list = [
        1, 2, 3,
        4, 5, 6,
    ]
    result = some_function_that_takes_arguments(
        'a', 'b', 'c',
        'd', 'e', 'f',
    )
    
    2 để đảm bảo nó được làm sạch kịp thời và đáng tin cậy sau khi sử dụng. Một tuyên bố thử/cuối cùng cũng được chấp nhận.
  • Các nhà quản lý bối cảnh nên được gọi thông qua các chức năng hoặc phương thức riêng biệt bất cứ khi nào họ làm một cái gì đó khác ngoài việc có được và phát hành tài nguyê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()
    
    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

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

    import re
    import glob
    import sys
    
    import requests
    import scrapy
    
    from flask import Flask
    from my_local_module import MyClass
    
    
    def top_level_function1():
        pass
    
    
    def top_level_function2():
        pass
    
    
    class TestClass(object):
        
        def class_method1():
            pass
    
        def class_method2():
            pass
    
    
    class TestClass2(object):
        
        def class2_method1():
            pass
    
        def class2_method2():
            pass
    
    88 và
    import re
    import glob
    import sys
    
    import requests
    import scrapy
    
    from flask import Flask
    from my_local_module import MyClass
    
    
    def top_level_function1():
        pass
    
    
    def top_level_function2():
        pass
    
    
    class TestClass(object):
        
        def class_method1():
            pass
    
        def class_method2():
            pass
    
    
    class TestClass2(object):
        
        def class2_method1():
            pass
    
        def class2_method2():
            pass
    
    89 đang làm một cái gì đó khác ngoài việc đóng kết nối sau khi giao dịch. Rõ ràng là quan trọng trong trường hợp này.

  • Hãy nhất quán trong các tuyên bố 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 ai trong số chúng nên làm. Nếu bất kỳ câu lệnh trả về nào trả về một biểu thức, bất kỳ câu lệnh trả về nào trong đó không có giá trị nào được trả về sẽ nêu rõ điều này là
    import re
    import glob
    import sys
    
    import requests
    import scrapy
    
    from flask import Flask
    from my_local_module import MyClass
    
    
    def top_level_function1():
        pass
    
    
    def top_level_function2():
        pass
    
    
    class TestClass(object):
        
        def class_method1():
            pass
    
        def class_method2():
            pass
    
    
    class TestClass2(object):
        
        def class2_method1():
            pass
    
        def class2_method2():
            pass
    
    90 và một câu lệnh trả về rõ ràng sẽ có mặt ở cuối hàm (nếu có thể truy cập):

    # 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

  • Sử dụng
    import re
    import glob
    import sys
    
    import requests
    import scrapy
    
    from flask import Flask
    from my_local_module import MyClass
    
    
    def top_level_function1():
        pass
    
    
    def top_level_function2():
        pass
    
    
    class TestClass(object):
        
        def class_method1():
            pass
    
        def class_method2():
            pass
    
    
    class TestClass2(object):
        
        def class2_method1():
            pass
    
        def class2_method2():
            pass
    
    91 và
    import re
    import glob
    import sys
    
    import requests
    import scrapy
    
    from flask import Flask
    from my_local_module import MyClass
    
    
    def top_level_function1():
        pass
    
    
    def top_level_function2():
        pass
    
    
    class TestClass(object):
        
        def class_method1():
            pass
    
        def class_method2():
            pass
    
    
    class TestClass2(object):
        
        def class2_method1():
            pass
    
        def class2_method2():
            pass
    
    92 thay vì cắt chuỗi để kiểm tra tiền tố hoặc hậu tố.

    startswith () và endswith () là sạch hơn và ít lỗ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()
    
    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

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

    # 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

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

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

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

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

  • Don Tiết viết các chuỗi chữ dựa trên khoảng trắng đáng kể. Khoảng cách trắng như vậy không thể phân biệt trực quan và một số biên tập viên (hoặc gần đây hơn, Reindent.py) sẽ cắt chúng.
  • Don Tiết so sánh các giá trị Boolean với đúng hoặc sai bằng cách sử dụng
    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:

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

    Worse:

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

  • Việc sử dụng các câu lệnh kiểm soát dòng chảy ________ 194/________ 195/________ 196 Trong bộ cuối cùng của
    import re
    import glob
    import sys
    
    import requests
    import scrapy
    
    from flask import Flask
    from my_local_module import MyClass
    
    
    def top_level_function1():
        pass
    
    
    def top_level_function2():
        pass
    
    
    class TestClass(object):
        
        def class_method1():
            pass
    
        def class_method2():
            pass
    
    
    class TestClass2(object):
        
        def class2_method1():
            pass
    
        def class2_method2():
            pass
    
    84, trong đó tuyên bố điều khiển dòng chảy sẽ nhảy ra ngoài bộ cuối cùng, không được khuyến khích. Điều này là do các tuyên bố như vậy sẽ hoàn toàn hủy bỏ bất kỳ ngoại lệ hoạt động nào đang lan truyền thông qua bộ cuối cùng:

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

Chú thích chức năng

Với sự chấp nhận của PEP 484, các quy tắc phong cách cho các 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 các chú thích trong phần trước).
  • Thử nghiệm với các phong cách chú thích được khuyến nghị 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 các 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 của bên thứ ba lớn với các chú thích kiểu kiểu PEP 484, xem xét mức độ dễ dàng để thêm các chú thích đó và quan sát xem sự hiện diện của chúng có tăng khả năng hiểu của mã hay không.
  • Thư viện tiêu chuẩn Python phải bảo thủ 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 cho mã mới và cho các chất 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, nên đặt nhận xét của biểu mẫu:

    gần đầu tập tin; Điều này bảo kiểm tra loại để bỏ qua tất cả các chú thích. (Có thể tìm thấy nhiều cách khác để vô hiệu hóa khiếu nại từ người kiểm tra loại trong PEP 484.)

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

Chú thích biến

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

  • Chú thích cho các biến cấp mô -đun, các biến lớp và thể hiện và các biến cục bộ phải có một không gian duy nhất sau đại tràng.
  • Không nên có không gian trước đại tràng.
  • Nếu một nhiệm vụ có phía bên tay phải, thì dấu hiệu bình đẳng sẽ có chính xác một khoảng trống ở cả hai bên:

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

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

  • Mặc dù PEP 526 được chấp nhận cho Python 3.6, cú pháp chú thích thay đổi là cú pháp ưa thích cho các tệp sơ khai trên tất cả các phiên bản của Python (xem PEP 484 để biết chi tiết).

Chú thích

Người giới thiệu

Bản quyền

Tài liệu này đã được đặt trong phạm vi công cộng.

Có phải các đường trống giữa các chức năng cần thiết trong Python?

Bạn nên sử dụng các dòng trống một cách bảo thủ trong mã của mình để phân tách các nhóm chức năng. Bạn không phải bao gồm các dòng trống giữa các dòng khác nhau nếu các dòng đó chỉ là một dòng mã tách biệt với nhau. Python sử dụng ký tự thức ăn mẫu điều khiển-l (^l) cho khoảng trắng.You do not have to include blank lines between different lines if those lines are each only a line of code separate from each other. Python uses the control-L (^L) form feed character for whitespace.

Làm thế nào để bạn sử dụng các dòng trống trong Python?

Sử dụng các dòng trống trong các chức năng, một cách tiết kiệm, để chỉ ra các phần logic. Python chấp nhận ký tự thức ăn điều khiển-l (tức là ^l) là khoảng trắng; Nhiều công cụ coi các ký tự này là dấu phân cách trang, vì vậy bạn có thể sử dụng chúng để tách các trang liên quan đến tệp của mình.. Python accepts the control-L (i.e. ^L) form feed character as whitespace; many tools treat these characters as page separators, so you may use them to separate pages of related sections of your file.

Có bao nhiêu dòng trống mà tiêu chuẩn PEP8 khuyến nghị sử dụng giữa các câu lệnh trong một định nghĩa hàm trong Python?

Hai dòng trống Nhập các câu lệnh trong khi nhiều nguồn trực tuyến nói rằng sẽ có hai dòng trống sau khi báo cáo nhập trước khi mã bắt đầu, điều này thường không chính xác.PEP 8 chỉ nói rằng hàm cấp cao nhất hoặc định nghĩa lớp nên được bao quanh bởi hai dòng trống!

Các dòng trống trong mã là gì?

Các dòng trống cải thiện khả năng đọc bằng cách đặt ra các phần của mã có liên quan đến logic.Hai dòng trống phải luôn được sử dụng trong các trường hợp sau: giữa các phần của tệp nguồn.Giữa các định nghĩa lớp và giao diện.improve readability by setting off sections of code that are logically related. Two blank lines should always be used in the following circumstances: Between sections of a source file. Between class and interface definitions.