E128 của PEP8 là gì: dòng tiếp tục được thụt lề cho thụt lề trực quan?


298

Chỉ cần mở một tệp với Sublime Text (với Sublime Linter) và nhận thấy lỗi định dạng PEP8 mà tôi chưa từng thấy trước đây. Đây là văn bản:

urlpatterns = patterns('',
    url(r'^$', listing, name='investment-listing'),
)

Nó đánh dấu đối số thứ hai, dòng bắt đầu url(...)

Tôi đã định vô hiệu hóa kiểm tra này trong ST2 nhưng tôi muốn biết tôi đang làm gì sai trước khi tôi bỏ qua nó. Bạn không bao giờ biết, nếu nó có vẻ quan trọng tôi thậm chí có thể thay đổi cách của mình :)

Câu trả lời:


475

PEP-8 khuyên bạn nên thụt dòng vào dấu ngoặc đơn mở nếu bạn đặt bất cứ thứ gì lên dòng đầu tiên, vì vậy nó sẽ được thụt vào khung mở:

urlpatterns = patterns('',
                       url(r'^$', listing, name='investment-listing'))

hoặc không đặt bất kỳ đối số nào trên vạch xuất phát, sau đó thụt vào mức thống nhất:

urlpatterns = patterns(
    '',
    url(r'^$', listing, name='investment-listing'),
)

urlpatterns = patterns(
    '', url(r'^$', listing, name='investment-listing'))

Tôi khuyên bạn nên đọc qua PEP-8 - bạn có thể đọc lướt qua rất nhiều phần, và nó khá dễ hiểu, không giống như một số PEP kỹ thuật hơn.


5
Bất cứ ai cũng biết tại sao Django làm điều này; Có một lý do tốt? Có vẻ như việc theo dõi PeP-8 sẽ dễ dàng như vậy.
TheHerk

6
Điều này rất phổ biến trong mã Django mà tôi đã thấy (cộng với tất cả các tài liệu của họ) đến nỗi nó thay thế PEP-8, sau tất cả, nó nói rằng " Nhiều dự án có hướng dẫn về phong cách mã hóa của riêng họ. Trong trường hợp có bất kỳ xung đột nào, dự án đó hướng dẫn cụ thể được ưu tiên cho dự án đó. "
Nick T

6
@TheHerk lý do có lẽ là đối số đầu tiên patterns()là duy nhất (tiền tố cho mọi thứ khác được chỉ định) và tất cả các đối số khác là các mẫu url về cơ bản là giống nhau.
Nick T

6
@NickT Bạn đang đọc sai PEP-8 - PEP-8 khuyên bạn nên tuân theo quy ước hiện có khi một dự án nhất định sử dụng nó - nhưng trong trường hợp này, mã không đi vào Django, nó sẽ đi vào dự án của bạn bằng Django - không cần thiết để theo quy ước của họ. Mục đích của quy tắc đó là giữ sự nhất quán bên trong các cơ sở mã.
Gareth Latty

25
Lưu ý rằng PEP8 cũng nói rằng bạn nên bỏ qua PEP8 khi thực hiện điều đó hợp lý và tôi sẽ lập luận rằng trong trường hợp này có ý nghĩa. Hãy không đồng ý cho các dự án của riêng bạn. Trong mọi trường hợp, điều này sẽ sớm trở thành một điểm cần thiết vì việc sử dụng patterns()sẽ không được chấp nhận trong Django 1.8: docs.djangoproject.com/en/dev/release/1.8/
Tom Carrick

13

Điều này cũng đúng với các câu lệnh như thế này (được định dạng tự động bởi PyCharm):

    return combine_sample_generators(sample_generators['train']), \
           combine_sample_generators(sample_generators['dev']), \
           combine_sample_generators(sample_generators['test'])

Mà sẽ đưa ra cùng một cảnh báo phong cách. Để thoát khỏi nó, tôi đã phải viết lại thành:

    return \
        combine_sample_generators(sample_generators['train']), \
        combine_sample_generators(sample_generators['dev']), \
        combine_sample_generators(sample_generators['test'])

2
Tôi đặc biệt thích dấu ngoặc đơn hơn dấu gạch chéo ngược ở đây, dòng đầu tiên return (, sau đó mỗi mục có thể trả về trên dòng riêng của nó, thụt lề và cuối cùng là dấu ngoặc đóng trên một dòng riêng biệt, ở cùng mức thụt lề như return. Chỉnh sửa: Giống như pastebin.com/fAe7558X
Markus Meskanen

1
@MarkusMeskanen Vâng, tôi cũng vậy. Tôi chỉ muốn chỉ ra rằng ngay cả định dạng tự động cũng không tuân thủ đầy đủ thông số kỹ thuật này.
hiển thị
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.