PEP8'in E128: görsel girintisi için yetersiz girintili çizgi nedir?


299

Sadece Sublime Text (Sublime Linter ile) içeren bir dosya açtım ve daha önce hiç görmediğim bir PEP8 biçimlendirme hatası fark ettim. İşte metin:

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

İkinci argümanı işaret ediyor, başlayan çizgi url(...)

Bu kontrolü ST2'de devre dışı bırakmak üzereydim ama görmezden gelmeden önce neyi yanlış yaptığımı bilmek istiyorum . Asla bilemezsiniz, eğer önemli görünüyorsa yöntemlerimi bile değiştirebilirim :)

Yanıtlar:


476

PEP-8 , ilk satıra herhangi bir şey koyarsanız açılış parantezlerine satır girintisini önerir , bu nedenle ya açılış ayrağına girintili olmalıdır:

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

veya başlangıç ​​çizgisine herhangi bir argüman koymamak, ardından tekdüze bir seviyeye girinti yapmak:

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

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

PEP-8 ile bir okuma almanızı öneririm - birçoğunu gözden geçirebilirsiniz ve bazı teknik PEP'lerin aksine, anlaşılması oldukça kolaydır.


5
Herkes Django'nun bunu neden yaptığını biliyor; bunun iyi bir nedeni var mı? PeP-8'i takip etmek kadar kolay olacak gibi görünüyor.
TheHerk

6
Bu gördüğüm Django kodunda o kadar yaygın ki (artı tüm belgelerinde) PEP-8'in yerini tartışmalı olarak geçiyor, sonuçta " Birçok projenin kendi kodlama stili yönergeleri var. Herhangi bir çatışma durumunda, böyle bir proje spesifik kılavuzlar bu proje için önceliklidir. "
Nick T

6
Gerekçe, muhtemelen ilk argümanın patterns()benzersiz (diğer her şey için bir önek) olması ve diğer tüm argümanların temelde aynı olan ur kalıpları olmasıdır.
Nick T

6
@NickT PEP-8'i yanlış okuyorsunuz - PEP-8, belirli bir projenin kullandığı mevcut sözleşmeyi izlemenizi önerir - ancak bu durumda kod Django'ya girmez, Django kullanarak projenize girer - gerek yoktur sözleşmelerini takip etmek. Bu kuralın amacı kod tabanları içinde tutarlılığı sağlamaktır.
Gareth Latty

25
PEP8'in de PEP8'i bunun mantıklı olduğu yerlerde görmezden gelmeniz gerektiğini belirttiğini ve bu durumda bunun mantıklı olduğunu iddia edeceğim. Kendi projelerinize katılmamaya çekinmeyin. Her halükarda, bu patterns()Django 1.8'de kullanımdan kaldırılacağı için yakında bir tartışma noktası olacak: docs.djangoproject.com/en/dev/releases/1.8/…
Tom Carrick

13

Bu, aşağıdaki gibi ifadeler için de geçerlidir (PyCharm tarafından otomatik olarak biçimlendirilir):

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

Hangi aynı stil uyarısı verecektir. Ondan kurtulmak için tekrar yazmak zorunda kaldım:

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

3
Burada ters eğik çizgi üzerinde parantez tercih ederim, ilk satır return (, sonra kendi satırındaki her iade edilebilir öğe, girintili ve son olarak ayrı girinti düzeyinde, aynı girinti düzeyinde return. Düzenleme: Bunun gibi pastebin.com/fAe7558X
Markus Meskanen

1
@MarkusMeskanen Evet, ben de. Sadece otomatik formatın bile bu spesifikasyona tam olarak uymadığını belirtmek istedim.
görünen
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.