Danh sách nhiều dòng Python

Vì vấn đề đã nảy sinh trong một số dự án python (bao gồm cả pylint và black), tôi nghĩ PEP-8 sẽ được hưởng lợi từ việc chính xác hơn một chút

https. //www. con trăn. trạng thái org/dev/peps/pep-0008/#indentation

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

và sau đó đưa ra hai ví dụ

vâng, nó mang lại

foo = long_function_name(
    var_one, var_two,
    var_three, var_four)

(có 1 dấu đầu dòng)

và không có nó cho

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

câu hỏi của tôi

def long_function_name(
    var_one, var_two, var_three,
    var_four
):  # <----   it visually make clear that print is not inside the argument list , so it is now distinguishable
    print(var_one)

"khả thi" ?

đặc biệt nếu bạn thấy ví dụ khác này

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

trong đó một bình luận được đưa ra theo cách có thể để chỉ có 1 vết lõm

vì vậy ít nhất chuỗi tài liệu phải đóng vai trò tương tự và cho phép

def long_function_name(
    var_one, var_two, var_three,
    var_four
): 
    """The doc string is also a comment """ 
    print(var_one)

Tôi sẽ giải thích các ví dụ mà bạn trích dẫn là hỗ trợ việc sử dụng

# Further indentation required as indentation is not distinguishable.
def long_function_name(
    var_one, var_two, var_three,
    var_four):
    print(var_one)
0 trên một dòng riêng, nếu lập trình viên muốn sử dụng kiểu đó. Tuy nhiên, tôi cũng sẽ rất vui nếu ai đó nói rằng PEP 8 không có lập trường nào về phong cách này

Chắc chắn nếu ai đó muốn cấm một phong cách cụ thể, thì

  1. Họ hoàn toàn có quyền làm như vậy trong các dự án của riêng họ, bất kể PEP 8 nói gì
  2. Họ không có quyền ra lệnh cho những dự án khác chọn làm gì, một lần nữa bất kể PEP 8

Nếu ai đó muốn khẳng định rằng PEP 8 cấm kiểu này, thì (a) họ phải có trách nhiệm chứng minh PEP 8 đưa ra khẳng định đó ở đâu và (b) đối với tôi, việc đưa ra khẳng định đó là một sự lãng phí thời gian vô nghĩa,

Trường hợp ranh giới duy nhất là các công cụ như pycodestyle, kiểm tra kiểu cho các dự án, có thể cần diễn giải PEP 8 khá nghiêm ngặt để triển khai kiểu “tuân thủ PEP 8”. Nhưng các cuộc tranh luận về cách họ chọn diễn giải PEP 8 thực sự là vấn đề đối với họ - nếu người dùng của họ không đồng ý với cách diễn giải của họ, họ có thể thêm cờ để cho phép người dùng sửa đổi kiểu cơ sở, ghi lại diễn giải của họ hoặc bất cứ điều gì họ chọn

Danh sách nhiều dòng Python
người lớn

Theo tôi, nếu nội dung của PEP8 không đủ rõ ràng, thì nội dung đó nên được giải thích rõ hơn. Nếu điều đó có thể đạt được tốt nhất bằng các ví dụ bổ sung, thì những ví dụ này nên được thêm vào

Nói chung, tôi đồng ý với quan điểm này, nhưng chỉ khi có sự nhầm lẫn thực sự xung quanh chủ đề liên quan đến phát triển thư viện tiêu chuẩn. Tôi đã phát hiện ra một vài ví dụ trong bài viết trên. Phần lớn nằm trong một tệp thử nghiệm duy nhất (_______11), chỉ có một phiên bản duy nhất xuất hiện trong mã thư viện tiêu chuẩn thực tế (

# Further indentation required as indentation is not distinguishable.
def long_function_name(
    var_one, var_two, var_three,
    var_four):
    print(var_one)
0 dòng 152, có trước repo GitHub)

Danh sách nhiều dòng Python
người lớn

Tôi không đồng ý rằng việc làm rõ nội dung nên được hoãn lại để tránh hiểu lầm về phạm vi. nếu phạm vi của PEP8 không đủ rõ ràng, thì phạm vi nên được giải thích tốt hơn

Cá nhân tôi không nghĩ có vấn đề với cách giải quyết phạm vi hiện tại trong PEP8. Ngay dòng đầu tiên đã ghi rõ

Tài liệu này đưa ra các quy ước viết mã cho mã Python bao gồm thư viện chuẩn trong bản phân phối Python chính

Trong đoạn cuối cùng của phần giới thiệu, cũng có

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

Tôi hiểu rằng sự hiểu lầm về phạm vi của nó chủ yếu xuất phát từ việc nó là hướng dẫn tạo kiểu Python nổi tiếng nhất

Để giải thích một chút về lý do của tôi vì không muốn đưa vào một ví dụ rõ ràng về một dòng “). ”, Tôi vẫn chưa tin rằng đó là nguồn gốc của sự nhầm lẫn thực sự hoặc một vấn đề thực sự trong bối cảnh phát triển stdlib. Nếu chúng tôi kết thúc việc thêm phần làm rõ chỉ vì có một số nhầm lẫn trong các dự án khác, đặc biệt là đối với hai dự án dành riêng cho định dạng mã cho mục đích chung, thì tôi nghĩ điều đó sẽ càng làm tăng thêm quan niệm sai lầm rằng PEP8 được dự định áp dụng như một kiểu Python phổ quát

Cũng có điều cần nói về việc không bao gồm mọi ví dụ có thể có về những việc nên làm và không nên làm trong PEP8. Bao gồm tất cả mọi thứ hầu như là không thể và cố gắng làm như vậy có thể dẫn đến việc tài liệu trở nên quá tải với các ví dụ có ý nghĩa tốt nhưng ít liên quan

Đặt giá trị 2 xu của tôi vào một chuỗi dài và cũ

Tôi nghĩ rằng PEP-8 rõ ràng từ chối

# Further indentation required as indentation is not distinguishable.
def long_function_name(
    var_one, var_two, var_three,
    var_four):
    print(var_one)
0 được gắn thẻ trên các dòng sau. Có lẽ ai đó sẽ thích nếu PEP-8 nói điều gì đó khác biệt và đang tìm kiếm sơ hở để thoát khỏi tầm nhìn của họ. Nhưng từ những gì tôi đọc được, tinh thần của PEP-8 đủ rõ ràng về chủ đề này

Ý kiến ​​​​của tôi là

# Further indentation required as indentation is not distinguishable.
def long_function_name(
    var_one, var_two, var_three,
    var_four):
    print(var_one)
0 sai vì hai lý do

Lý do 1. diễn giải trực quan

Trong Python, khoảng trắng có ý nghĩa về mặt cấu trúc. Điều đó có nghĩa đen là khi bạn tab sang phải, bạn nói với người đọc “điều này bắt đầu từ đây”. Khi bạn rời tab, bạn nói "điều này kết thúc ở đây". Khi điều hướng mã nhanh, điều này rất quan trọng vì nó cho phép bạn bỏ qua nhiều đoạn mã mà không cần đọc và không làm gián đoạn mắt

Có sự khác biệt rõ ràng giữa “

# Further indentation required as indentation is not distinguishable.
def long_function_name(
    var_one, var_two, var_three,
    var_four):
    print(var_one)
3” được gắn thẻ bên trái và “
# Further indentation required as indentation is not distinguishable.
def long_function_name(
    var_one, var_two, var_three,
    var_four):
    print(var_one)
0” được gắn thẻ bên trái. Và nó là cái này. Trong từ điển, định nghĩa bắt đầu khi bạn nhập và kết thúc khi bạn bỏ

foo = {
    # Thing has started
    'x': 1,
    'y': 2,
} 
# Thing has finished. 

Nhưng khi bạn làm điều tương tự cho một

# Further indentation required as indentation is not distinguishable.
def long_function_name(
    var_one, var_two, var_three,
    var_four):
    print(var_one)
0, bạn đã phá vỡ quy tắc này

________số 8

Bạn không bao giờ vi phạm quy tắc này ở bất kỳ nơi nào khác trong python hoặc hướng dẫn kiểu của nó

Nếu đây là một mẫu lặp lại… nếu mỗi

# Further indentation required as indentation is not distinguishable.
def long_function_name(
    var_one, var_two, var_three,
    var_four):
    print(var_one)
0 xuất hiện trên dòng riêng của nó và được đánh dấu lại bên trái, mắt bạn sẽ nhanh chóng nhận ra hình dạng. Nhưng bởi vì điều này đang được sử dụng trong một trường hợp đặc biệt nên nó có xu hướng làm họ giật mắt mỗi khi nó xảy ra. Cá nhân tôi thấy điều này làm chậm quá trình đọc mã theo một mức độ lớn

Lý do 2. Điều này dường như chống lại PEP-8

Sẽ là vô lý nếu mong đợi PEP-8 cấm rõ ràng mọi thứ mà mọi người có thể nghĩ ra. Vì vậy, không có gì đáng ngạc nhiên khi không có “không…” trong trường hợp này

Nhưng PEP-8 cung cấp một hộp công cụ về cách mọi thứ nên tìm kiếm trong một số trường hợp nhất định. Nhưng có một mâu thuẫn "làm điều này điều khác". PEP 8 trạng thái (đủ rõ ràng)

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

PEP 8 đã cho bạn biết rõ ràng cách “phân biệt các đối số với phần còn lại”. Trừ khi bạn có lý do thực sự chính đáng để đi chệch khỏi điều này, nếu không thì bạn thực sự không thể bỏ qua nó và vẫn tuyên bố tuân theo PEP-8

Đa dòng trong Python là gì?

Trong Python, bạn có nhiều cách khác nhau để chỉ định một chuỗi nhiều dòng. Bạn có thể có một chuỗi được chia thành nhiều dòng bằng cách đặt nó trong ba dấu ngoặc kép . Ngoài ra, dấu ngoặc cũng có thể được sử dụng để trải một chuỗi thành các dòng khác nhau. Hơn nữa, dấu gạch chéo ngược hoạt động như một ký tự tiếp tục dòng trong Python.

Làm cách nào bạn có thể tạo chuỗi nhiều dòng trong Python?

Sử dụng dấu ngoặc đơn và dấu nháy đơn/kép . Như hình trên, chúng ta có thể sử dụng cả dấu ngoặc đơn (' ') và dấu ngoặc kép (" ")