E128 ของ PEP8 คืออะไร: เส้นต่อเนื่องภายใต้การเยื้องสำหรับเยื้องภาพ


298

เพิ่งเปิดไฟล์ที่มี Sublime Text (พร้อม Sublime Linter) และสังเกตเห็นข้อผิดพลาดในการจัดรูปแบบ PEP8 ที่ฉันไม่เคยเห็นมาก่อน นี่คือข้อความ:

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

มันตั้งค่าสถานะของอาร์กิวเมนต์ที่สองบรรทัดที่เริ่มต้น url(...)

ฉันกำลังจะปิดการใช้งานการตรวจสอบนี้ใน ST2 แต่ฉันต้องการที่จะรู้ว่าสิ่งที่ฉันทำผิดก่อนที่ฉันจะไม่สนใจมัน คุณไม่มีทางรู้ว่าถ้ามันสำคัญฉันก็อาจเปลี่ยนวิธีของฉันได้ :)

คำตอบ:


475

PEP-8 แนะนำให้คุณเยื้องบรรทัดไปยังวงเล็บเปิดถ้าคุณใส่อะไรในบรรทัดแรกดังนั้นควรเยื้องไปที่วงเล็บเปิด:

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

หรือไม่ใส่ข้อโต้แย้งใด ๆ ในบรรทัดเริ่มต้นจากนั้นเยื้องไปที่ระดับสม่ำเสมอ:

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

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

ฉันขอแนะนำให้อ่าน PEP-8 - คุณสามารถอ่านผ่านมันได้มากมายและมันค่อนข้างเข้าใจง่ายซึ่งแตกต่างจาก PEP เชิงเทคนิคบางส่วน


5
ไม่มีใครรู้ว่าทำไม Django ถึงทำสิ่งนี้ มีเหตุผลที่ดีหรือไม่? ดูเหมือนว่ามันจะง่ายต่อการติดตาม PeP-8
TheHerk

6
นี่เป็นรหัสที่แพร่หลายใน Django ที่ฉันเคยเห็น (รวมทั้งเอกสารของพวกเขาด้วย) ว่าเนื้อหานั้นแทนที่ PEP-8 หลังจากทั้งหมดบอกว่า " หลายโครงการมีแนวทางสไตล์การเขียนโค้ดของตัวเองในกรณีที่มีความขัดแย้งใด ๆ โครงการดังกล่าว คู่มือเฉพาะจะมีความสำคัญสำหรับโครงการนั้น "
Nick T

6
@TheHerk เหตุผลอาจเป็นไปได้ว่าอาร์กิวเมนต์แรกที่patterns()ไม่ซ้ำกัน (คำนำหน้าสำหรับทุกสิ่งที่ระบุไว้) และข้อโต้แย้งอื่น ๆ ทั้งหมดเป็นรูปแบบ URL ซึ่งโดยทั่วไปจะเหมือนกัน
Nick T

6
@NickT คุณกำลังอ่านผิด PEP-8 - PEP-8 แนะนำให้ทำตามแบบแผนที่มีอยู่แล้วซึ่งโครงการที่กำหนดใช้ - แต่ในกรณีนี้รหัสไม่เข้าสู่ Django มันจะเข้าสู่โครงการของคุณโดยใช้ Django - ไม่จำเป็น ทำตามแบบแผนของพวกเขา จุดประสงค์ของกฎนั้นคือการรักษาความมั่นคงภายในโค้ด - เบส
Gareth Latty

25
โปรดทราบว่า PEP8 ยังระบุด้วยว่าคุณควรเพิกเฉยต่อ PEP8 ที่เหมาะสมและฉันจะโต้แย้งว่าในกรณีนี้สมเหตุสมผล รู้สึกไม่เห็นด้วยสำหรับโครงการของคุณเอง ไม่ว่าในกรณีใด ๆ นี้จะเป็นจุดที่สงสัยในไม่ช้าซึ่งpatterns()จะใช้เลิกใช้ใน Django 1.8: docs.djangoproject.com/en/dev/releases/1.8/…
Tom Carrick

13

สิ่งนี้จะไปสำหรับข้อความเช่นนี้ (จัดรูปแบบอัตโนมัติโดย PyCharm):

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

ซึ่งจะให้คำเตือนลักษณะเดียวกัน เพื่อกำจัดมันฉันต้องเขียนมันไปที่:

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

2
ผมขอต้องการวงเล็บกว่าทับขวานี่เป็นบรรทัดแรกแล้วแต่ละรายการที่ส่งคืนได้ในบรรทัดของตัวเองเยื้องและในที่สุดก็วงเล็บปิดในบรรทัดที่แยกต่างหากที่ระดับเยื้องเช่นเดียวกับreturn ( แก้ไข:เช่นนี้pastebin.com/fAe7558Xreturn
Markus Meskanen

1
@MarkusMeskanen ใช่ฉันก็เช่นกัน ฉันแค่อยากจะชี้ให้เห็นว่าแม้รูปแบบอัตโนมัติจะเป็นไปตามข้อกำหนดนี้อย่างเต็มที่
displayname
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.