Apa itu E128 PEP8: garis lanjutan di bawah indentasi untuk indentasi visual?

298

Baru saja membuka file dengan Teks Sublime (dengan Sublime Linter) dan menemukan kesalahan format PEP8 yang belum pernah saya lihat sebelumnya. Ini teksnya:

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

Ini menandai argumen kedua, baris yang dimulai url(...)

Saya akan menonaktifkan pemeriksaan ini di ST2 tetapi saya ingin tahu apa yang saya lakukan salah sebelum saya abaikan. Anda tidak pernah tahu, jika tampaknya penting saya bahkan mungkin mengubah cara saya :)

Oli
sumber

Jawaban:

475

PEP-8 merekomendasikan Anda membuat indentasi baris ke tanda kurung pembuka jika Anda meletakkan apa pun pada baris pertama, sehingga harus indentasi pada braket pembuka:

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

atau tidak menempatkan argumen apa pun di baris awal, kemudian membuat indentasi ke tingkat yang seragam:

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

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

Saya sarankan membaca PEP-8 - Anda dapat membaca banyak, dan sangat mudah dimengerti, tidak seperti beberapa PEP yang lebih teknis.

Gareth Latty
sumber
5
Ada yang tahu mengapa Django melakukan ini; apakah ada alasan bagus Tampaknya mudah untuk mengikuti PeP-8.
TheHerk
6
Ini sangat di mana-mana dalam kode Django yang pernah saya lihat (ditambah itu semua dokumen mereka) bahwa itu bisa menggantikan PEP-8, setelah semua itu mengatakan " Banyak proyek memiliki pedoman gaya pengkodean mereka sendiri. Dalam hal terjadi konflik, proyek tersebut -panduan khusus diutamakan untuk proyek itu. "
Nick T
6
@ TheHerk alasannya mungkin argumen pertama patterns()yang unik (awalan untuk segala sesuatu yang ditentukan), dan semua argumen lainnya adalah pola url yang pada dasarnya sama.
Nick T
6
@NickT Anda salah membaca PEP-8 - PEP-8 merekomendasikan untuk mengikuti konvensi yang ada di mana proyek tertentu menggunakannya - tetapi dalam hal ini kode tidak masuk ke Django, itu masuk ke proyek Anda menggunakan Django - tidak perlu untuk mengikuti konvensi mereka. Tujuan dari aturan itu adalah untuk menjaga konsistensi di dalam basis kode.
Gareth Latty
25
Perhatikan bahwa PEP8 juga menyatakan bahwa Anda harus mengabaikan PEP8 di mana masuk akal untuk melakukannya, dan saya berpendapat bahwa dalam hal ini masuk akal. Jangan ragu untuk tidak menyetujui proyek Anda sendiri. Bagaimanapun, ini akan segera menjadi titik perdebatan karena penggunaan patterns()akan dihentikan di Django 1.8: docs.djangoproject.com/en/dev/releases/1.8/…
Tom Carrick
13

Ini berlaku juga untuk pernyataan seperti ini (diformat secara otomatis oleh PyCharm):

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

Yang akan memberikan peringatan gaya yang sama. Untuk menghilangkannya saya harus menulis ulang untuk:

    return \
        combine_sample_generators(sample_generators['train']), \
        combine_sample_generators(sample_generators['dev']), \
        combine_sample_generators(sample_generators['test'])
nama tampilan
sumber
2
Saya sangat suka tanda kurung daripada garis miring terbalik di sini, baris pertama adalah return (, kemudian setiap item yang dapat dikembalikan pada barisnya sendiri, indentasi, dan akhirnya kurung tutup pada baris yang terpisah, pada tingkat indentasi yang sama dengan return. Sunting:
Sukai
1
@MarkusMeskanen Ya, saya juga. Saya hanya ingin menunjukkan bahwa bahkan format otomatis tidak sepenuhnya sesuai dengan spesifikasi ini.
displayname