Python pep-8 neden girinti için sekmelerin üzerinde boşluklar olmasını şiddetle tavsiye ediyor?


155

Stack Overflow ve PEP 8'de önerinin yalnızca Python programlarında girinti için boşluk kullanılması olduğunu görüyorum . Tutarlı girinti ihtiyacını anlayabiliyorum ve bu acıyı hissettim.

Alanların tercih edilmesinin altında yatan bir sebep var mı? Sekmelerle çalışmanın çok daha kolay olduğunu düşünürdüm.


7
Bilmek için PEP tartışmasını okuyun.
e-satis

116
1 girinti seviyesi ... 1. Tek bir sekmeyi kullanabildiğiniz zaman N boşluk kullanmayı kabul etmek tamamen mantıksızdır. Ki bu arada, tam olarak bunu yapmak niyetindeydi. Girinti. Bir Zamanlar. 1 girinti düzeyi = 1 tek karakter, yani 1 tek sekme. Ve daha kullanışlıdırlar çünkü her kodlayıcı onu nasıl görselleştireceğini özgürce seçebilir. Boşluk kullanmak aptalca, bunun için aptalca olmayan tek bir argüman görmedim.
o0 '.

34
@BlueBomber ve neden siz varken insanları bir yazı tipi boyutuna ve beğendiğiniz bir renk düzenine sahip olmaya zorlamıyorsunuz? Hala aptalca.
o0 '.

13
@BlueBomber hayır, hayır, TAM OLARAK aynı saçmalık düzeyinde.
o0 '.

12
@BlueBomber Farkı tam olarak nedir? Fark edilir bir fayda sağlamadan, başka bir geliştiricinin ortamlarının yapılandırmasında bir derece özgürlüğü azaltıyorsunuz. Diktatör olmak ve herkesi koda 2 veya 4 veya 29 boşluğa karşılık gelen girintiyle bakmaya zorlamak istiyorsanız, bunu yine de sekmelerle yapabilirsiniz. Sadece astlarınızdan IDE'lerini tercih ettiğiniz boşluk sayısına karşılık gelen sekmeleri görüntüleyecek şekilde ayarlamalarını isteyin. Bunu yapma yetkiniz yoksa, belki de geniş bir girinti biriminin gözleri için ne kadar rahat olduğuna kendileri karar vermelerine izin vermelisiniz.
Asad Saeeduddin

Yanıtlar:


114

Cevap tam orada PEP'te verilmiştir [ed: bu pasaj 2013'te düzenlenmiştir ]. Alıntı yaparım:

En popüler Python girinti yolu sadece boşluklu olduğunu.

Başka hangi temel nedene ihtiyacınız var?

Daha az açık söylemek gerekirse: İlk paragrafta belirtildiği gibi KEP'in kapsamını da düşünün:

Bu belge, ana Python dağıtımındaki standart kitaplığı içeren Python kodu için kodlama kuralları verir.

Amaç, resmi python dağıtımına giren tüm kodları tutarlı bir şekilde biçimlendirmektir (umarım bunun evrensel olarak bir Good Thing ™ olduğu konusunda anlaşabiliriz).

Bireysel bir programcı için boşluklar ve sekmeler arasındaki karar a) gerçekten bir zevk meselesi olduğundan ve b) teknik araçlarla (editörler, dönüştürme komut dosyaları, vb.) Kolayca ele alındığından, tüm tartışmayı sonlandırmanın açık bir yolu vardır: birini seçin .

Guido seçilecek kişiydi. Bir neden bile söylemek zorunda değildi, ama yine de deneysel verilere atıfta bulundu.

Diğer tüm amaçlar için, bu PEP'i bir öneri olarak alabilir ya da görmezden gelebilirsiniz - seçiminiz, ekibinizin veya takım liderlerinizin.

Ama size bir tavsiyede bulunabilirsem: karıştırmayın ;-) [ed: Sekmeleri ve boşlukları karıştırmak artık bir seçenek değil.]


11
Kabul. Tutarlılık, sekmelerden X boşluklarına ve Y boşluklarına göre daha önemlidir.
Mike Clark

10
merak etmeme neden oluyor ... standart kitaplık neden bu kadar çok mixedCase yöntem adına sahip?
Kyle Wild

6
@dorkitude: a) kimse mükemmel değildir. b) tarihsel nedenler.

8
Öyleyse neden bu kadar çok programcı PEP-8'den önce boşluk kullanmayı seçti? Gerçekten bilmek istediğim de bu. Sekmelerin avantajları bana açık görünüyor, ancak boşluklar değil.
einnocent


109

Görünüşe göre herkes boşluklara karşı çok önyargılı. Yalnızca sekmeleri kullanıyorum. Nedenini çok iyi biliyorum.

Sekmeler aslında boşluklardan sonra gelen harika bir buluştur . Milyonlarca kez boşluk bırakmadan veya sahte bir sekme (boşluk oluşturan) kullanmadan girintileme yapmanızı sağlar.

Herkesin sekme kullanımını neden ayırt ettiğini gerçekten anlamıyorum. Daha yeni ve daha verimli bir teknolojiyi seçmeleri için gençleri ayırt eden ve darbeli aramanın sadece bu yeni yeni telefonlarda değil her telefonda çalıştığından şikayet eden yaşlılara çok benzer . "Tonlu arama her telefonda çalışmıyor, bu yüzden yanlış".

Düzenleyiciniz sekmeleri düzgün şekilde işleyemiyor mu? Peki, modern bir editör edinin . Kahrolası bir zaman olabilir, şimdi 21. yüzyıldayız ve bir editörün yüksek teknoloji ürünü karmaşık bir yazılım parçası olduğu zamanlar çoktan geçti. Artık sekmeleri destekleyen tonlarca editörümüz var. Ayrıca, boşluklarla yapamayacağınız bir sekmenin ne kadar olması gerektiğini de tanımlayabilirsiniz. Sekmeleri göremiyor musunuz? Bu bir tartışma için nedir? Eh, boşlukları da göremezsiniz!

Daha iyi bir editör almayı önermek için bu kadar cesur olabilir miyim? Görünmez karakterler sergileyen , 10 yıl kadar önce piyasaya sürülen bu yüksek teknoloji ürünü olanlardan biri mi? (alaycı)

Boşluk kullanmak çok daha fazla silme ve biçimlendirme çalışmasına neden olur. Bu nedenle (ve bunu bilen ve benimle aynı fikirde olan diğer tüm insanlar) Python için sekmeler kullanır.

Sekmeleri ve boşlukları karıştırmak hayır-hayırdır ve bu konuda bir tartışma yoktur. Bu bir karmaşa ve asla işe yaramaz.


32
Buna eklemek için, klavyenize bir göz atın, TAB tuşunun sembolü girintiyi açıkça gösterir - anahtarın girintili amacı SPACE'in değil. PEP8 boşlukların kullanılmasını önerir IMHO bir hata ama bu sadece bir öneridir - en.wikipedia.org/wiki/Tab_character#Tab_characters
Daniel Sokolowski

32
Bu gönderi ile tamamen hemfikir. Boşluk kullanmak, girinti hatalarıyla bu 1 boşlukta takılmayı seven aptallar içindir. Girintiniz 1 sekme kadar kapalıysa, bunu fark edeceğinizi garanti ederim.
2013

12
@Zingham Hiç kimse sekmeleri özel olarak kullanamaz: sekmeler ve boşluklar her zaman birlikte kullanılır ve bu tutarsızlığa neden olur. Ben ve binlerce kişi bunları her gün oldukça tutarlı bir şekilde kullanıyoruz. Girinti için sekmeler, hizalama için boşluklar. Bu kavramın tam olarak hangi bölümünü kavramayı bu kadar çok zor buluyorsunuz ve neden tutarlı bir şekilde uygulamanın imkansız olduğuna ikna oldunuz?
2016

1
Sekmelerle ilgili asıl sorun, "# Açılış sınırlayıcıyla hizalı" yorumunun altında aynı PEP8 tarafından önerilen karaktere tam indendasyon alamamanızdır. Boşlukları tercih etmenin tek nedeni budur: girintiyi doğru yapmak için!
user541905

2
Soru, "Python pep-8, girinti için sekmeler üzerinde neden kesinlikle boşluk önerir?" . Bu cevap, PEP8 hakkında hiçbir şeyden bahsetmiyor. ||| Soruyu cevaplamaya çalışmak yerine ... bu cevap bana büyük bir küçümseyen, öncelikle fikir parçası olarak geliyor. "Sekmeler boşluklardan daha iyidir ve işte nedeni ..." demek için kullanılan 276 kelime vardır.
Trevor Boyd Smith

44

Şahsen sekmelerdeki boşluklara katılmıyorum. Bana göre sekmeler bir belge düzeni karakteri / mekanizmasıdır; boşluklar ise kod durumunda komutlar arasında içerik veya sınırlandırma içindir.

Jim'in, sekmelerin gerçekten sorun olmadığı, konu insanların ve sekmeleri ve alanları nasıl karıştırmak istedikleri konusundaki yorumlarına katılıyorum.

Bununla birlikte, kongre uğruna kendimi boşluk kullanmaya zorladım. Tutarlılığa kişisel tercihlerden çok değer veriyorum.


4
Kendimi boşlukları kullanmaya da zorladım, ancak editör (en azından Eclipse + PyDev) bilge sekmeler, özellikle görünmez karakterleri göster özelliğini etkinleştirirseniz kazanır. Ayrıca sekmeleri görsel olarak 4, 8, 6 boşluk olacak şekilde kolayca ayarlayabilirim. Yani kodumda en azından kişisel tercihlere değer veriyorum ve mevcut kod tabanında yerleşik kural buysa boşluklara bağlı kalıyorum.
Daniel Sokolowski

3
Bir takımda kod yazmadığınız sürece sorun değil. Bir takıma girdiğinizde, tek bir kongre üzerinde anlaşır ve ona bağlı kalırsınız.
Soviut

1
@Soviut Bana daha çok temenni gibi geliyor. Bulunduğum tüm takımlarda, resmi parti çizgisi "kullanım alanları" idi. Gerçek şu ki, hemen hemen her dosya hem sekmeler hem de boşluklardan oluşan bir karmaşaydı ve sürekli olarak yalnızca boşluklar veya yalnızca sekmeler kullanan dosyalarda bile girinti hala her yerde bulunuyordu.
antred

Evet ama demek istediğim buydu. Nihayetinde bir fikir birliğine varılır ve uygulanır. Dediğin gibi, genellikle "boşluk kullan" dır.
Soviut

bu sekmeleri tercih etmemin ana nedeni. Düzen ve sözcük sınırlandırması için ayrı karakterlere sahip olmak mantıklı
woojoo666

31

Boşlukların nedeni, sekmelerin isteğe bağlı olmasıdır. Boşluklar, noktalama işaretlerindeki gerçek en düşük ortak paydadır.

Her düzgün metin düzenleyicinin bir "sekmeleri boşluklarla değiştir" vardır ve birçok kişi bunu kullanır. Ama her zaman değil.

Bazı metin editörleri bir dizi boşluğu bir sekmeyle değiştirebilirken, bu gerçekten nadirdir.

Alt Satır . Boşluklarla yanlış gidemezsin. Sen belki sekmeleri ile ters gidebilir. Bu yüzden sekmeleri kullanmayın ve hata riskini azaltın.


15
Başkalarının çoğu (insanlar, metin editörleri, vb.) De yanlış yoldayken bir şeyi yanlış şekilde yapmaya asla yemin etmem. 2015 yılında, sekmeleri iyi işlemeyen bir metin editörü çöp kutusuna aittir.
antred

2
"Boşluklarla yanlış gidemezsiniz. Sekmelerle yanlış gidebilirsiniz". Bunu% 100 yanlış buldum. Deneyimlerime göre: "Sekmelerde yanlış gidemezsiniz. Boşluklarda yanlış gidebilirsiniz" ... özellikle kod paylaşırken.
cmroanirgo

6
Sonunda birisi şunu söyledi: boşluk kullanın çünkü en düşük ortak payda bu. Aynı kural, bizi devlet dairelerinde MBR, BIOS ve kağıt formları tutmamızı sağladı. Bunların aslında kavramsal sorunları olması dışında, sekmeler ve boşluklar% 100 aptalca bir kullanıcı sorunudur.
Milind R

2
Bu bana bir Argumentum ad populumu gibi geliyor: bir önermenin doğru olduğu sonucuna varan yanıltıcı argüman çünkü birçok veya çoğu insan buna inanıyor. Her düzenleyici sekmeleri boşluklarla değiştirebildiğinden, boşluklar doğru seçimdir, bir yanlıştır !!
Djunzu

29

Sekmelerle ilgili sorun, görünmez olmaları ve insanların sekmelerin genişliği konusunda asla hemfikir olmamasıdır. Sekmeleri ve boşlukları karıştırdığınızda ve sekme duraklarını (her 8 boşlukta bir sekme durakları kullanan) Python dışında bir şeye ayarladığınızda, kodu Python'un gördüğünden farklı bir düzende göreceksiniz. Ve düzen blokları belirlediğinden, farklı mantık göreceksiniz. İnce böceklere yol açar.

PEP 8'e karşı gelmekte ve sekmeleri kullanmakta ısrar ediyorsanız - veya daha kötüsü, sekmeleri ve boşlukları karıştırmak - en azından her zaman python'u tutarsız girinti oluşturan '-tt' argümanıyla çalıştırın (bazen bir sekme, bazen aynı girinti için bir boşluk) seviye) bir hata. Ayrıca, mümkünse, düzenleyicinizi sekmeleri farklı şekilde görüntüleyecek şekilde ayarlayın. Ama gerçekten, en iyi yaklaşım sekme kullanmamaktır.


43
Sekmelerin görünmez olduğu ve insanların sekmelerin genişliği konusunda fikir birliğine varamadığı doğrudur. Ancak aynısı boşluklar için de geçerlidir. Sekmeleri ve boşlukları karıştırdığınızda işler ters gider. Ama neden bu durumu boşluklarda değil de sekmelerde suçluyorsunuz?
Jim

47
Hayır, boşluklar için aynısı geçerli değil. İnsanlar alanların genişliği konusunda anlaşabilirler.
Rafał Dowgird

32
Tek bir boşluk her zaman aynı genişlikte olabilir, ancak boşluklarla girinti her zaman aynı genişlikte değildir. Geniş aralıklı sekmeleri kullanmayı kabul etmenin, n boşlukla girinti yapmayı kabul etmekten ne kadar farklı olduğunu göremiyorum.
Jim

26
Evet, ikisini karıştırmanın neden olabileceğini biliyorum. Anlamadığım şey, neden bazılarının bunu sekmelerde suçladığı. Sorun onları karıştırmaktır, özellikle sekmeler değil. Sorunu sekmeleri boşluklarla değiştirerek çözebilirsiniz, ancak aynı zamanda boşlukları sekmelerle değiştirerek de sorunu çözebilirsiniz.
Jim

70
Ve hayır, ben 8 genişlikte sekmeler kullanırsam ve 6 geniş sekmeler kullanırsanız ve kodu paylaşırsak, karışmaz. Hepsi Python yorumlayıcısına tek bir sekme.
Jim

23

Girintiyle ilgili temel sorunlar, sekmeleri ve boşlukları karıştırdığınızda ortaya çıkar. Açıkçası bu size hangisini seçmeniz gerektiğini söylemez, ancak bir yazı tura atarak seçseniz bile bir tane tavsiye etmek için iyi bir neden.

Bununla birlikte, IMHO'nun sekmeler yerine boşlukları tercih etmenin birkaç küçük nedeni vardır:

  • Farklı araçlar. Bazen kod, bir programcının editörünün dışında görüntülenir. Örneğin. bir haber grubuna veya foruma gönderildi. Boşluklar genellikle buradaki sekmelerden daha iyidir - her yerde boşluklar karışır, sekmeler de yapar, ancak bunun tersi olmaz.

  • Programcılar kaynağı farklı görürler. Bu son derece özneldir - ya sekmelerin ana yararı ya da hangi tarafta olduğunuza bağlı olarak bunlardan kaçınmanın bir nedeni. Artı tarafta, geliştiriciler kaynağı tercih ettikleri girintiyle görüntüleyebilirler, böylece 2 boşluklu girintiyi tercih eden bir geliştirici, aynı kaynak üzerinde 8 alanlı bir geliştirici ile çalışabilir ve yine de onu istediği gibi görebilir. Bunun dezavantajı, bunun yansımaları olmasıdır - bazı insanlar çok derin iç içe olduklarına dair çok görünür geri bildirimler verdiği için 8-alanı severler - 2-indenter tarafından kontrol edilen kodu sürekli olarak editörlerine sararak görebilirler. Her geliştiricinin kodu aynı şekilde görmesi, satır uzunluklarında daha fazla tutarlılığa ve diğer hususlara yol açar.

  • Devam eden satır girintisi. Bazen bir öncekinden taşındığını belirtmek için bir satırı girintili yapmak istersiniz. Örneğin.

    def foo():
        x = some_function_with_lots_of_args(foo, bar, baz,
                                            xyzzy, blah)
    

    Sekmeler kullanıyorsanız, düzenleyicilerinde boşlukları ve sekmeleri karıştırmadan farklı sekme duraklarını kullanan kişiler için bunu hizalamanın bir yolu yoktur. Bu, yukarıdaki faydayı etkili bir şekilde öldürür.

Açıkçası, bu, programlamanın sıkıntılı olduğu, derin dini bir konudur. En önemli konu, tercih ettiğiniz kişi bu olmasa bile, birini seçmemizdir. Bazen, önemli girintinin en büyük avantajının, en azından ayraç yerleştirme alev savaşlarından kaçınmamız olduğunu düşünüyorum.

Jamie Zawinski'nin konuyla ilgili bu makalesi de okunmaya değer .


3
Hizalama yine de önemsiz. Parantezleri bir blok gibi kullanıyorum ve her argümanı girintiliyorum. Ayrıca, örneğinizde, bir argüman listesinin içinde olduğunuz için boşlukları çok iyi kullanabilirsiniz ve orada istediğiniz kadar boşluk istifleyebilirsiniz.
Soviut

3
@Soviut: Boşluklarla girinti yaparsanız, hizalama, farklı bir sekme boyutuyla görüntülendiği anda bozulur. Bunu korumanın tek yolu, girinti düzeyinde sekmeler kullanmak ve ardından geri kalanlar için boşluklar kullanmaktır - yani, kendi sorunlarına yol açan boşlukları ve sekmeleri karıştırın.
Brian

Evet, bu yüzden kendi argümanlarım üzerinde blok girintileme şeklindeki python kuralını kullanma eğilimindeyim. Elbette, açık küme ayracı ile hizalanmayabilirler, ancak hangi satıra veya komuta ait oldukları hala açıktır. JQuery sözdizimi benzer bir ilkeye göre çalışır.
Soviut

2
@Brian: Bunun nasıl bir soruna yol açtığını anlamıyorum. Bu tam olarak doğru yoldur, girinti için sekmeler, hizalama için boşluklar. Girinti için boşlukları ve sekmeleri karıştırmakla aynı şey değildir .
antred

1
@CoreDumpError Uh hayır, kesinlikle değil. Python 3'ün hiçbir komut dosyalarımdan şikayet etmediğini biliyorum ve tüm lanet zamanı hizalamak için girinti / boşluklar için sekmeler kullanıyorum. Ayrıca, PEP8 sadece bir öneri olduğu için (ve benim görüşüme göre harap beyinli bir öneridir) hiçbir şeyi "yasaklayamaz".
2016

12

Sekmelerin kullanımının PEP 8'in başka bir yönünü karıştırdığını unutmayın:

Tüm satırları maksimum 79 karakterle sınırlayın.

Farz edelim ki, 2'lik bir sekme genişliği kullanıyorsunuz ve ben 8'lik bir sekme genişliği kullanıyorum. Tüm kodunuzu en uzun satırlarınız 79 karaktere ulaşacak şekilde yazıyorsunuz, sonra ben de dosyanız üzerinde çalışmaya başlıyorum. Şimdi okunması zor kodum var çünkü (PEP'in belirttiği gibi):

Çoğu araçtaki varsayılan sarma, kodun görsel yapısını bozar

Hepimiz 4 boşluk kullanırsak, HER ZAMAN aynıdır. Editörü 80 karakter genişliğini destekleyebilen herkes kodu rahatça okuyabilir. Not: 80 karakter sınırı başlı başına kutsal bir savaştır, bu yüzden buna buradan başlamayalım.

Sucky olmayan herhangi bir düzenleyici, boşlukları sekmelermiş gibi kullanma seçeneğine sahip olmalıdır (hem ekleme hem de silme), böylece bu gerçekten geçerli bir argüman olmamalıdır.


7

Sorunun cevabı şudur: PEP-8 bir tavsiyede bulunmak istiyor ve alanlar daha popüler olduğu için sekmeler üzerinde boşlukları şiddetle tavsiye edeceğine karar verdi.


PEP-8 hakkında notlar

PEP-8, 'Girinti seviyesi başına 4 boşluk kullan' diyor .
Bunun standart tavsiye olduğu açıktır.

'Bozmak istemediğiniz gerçekten eski kod için 8 boşluklu sekmeleri kullanmaya devam edebilirsiniz.'
Sekmelerin kullanılabileceği BAZI durumlar olduğu açıktır.

"Sekmeleri ve boşlukları asla karıştırmayın."
Bu açık bir karıştırma yasağı - bence hepimiz bu konuda hemfikiriz. Python bunu algılayabilir ve genellikle tıkanır. -Tt bağımsız değişkeninin kullanılması bunu açık bir hata yapar.

Python'u girintilemenin en popüler yolu yalnızca boşluk kullanmaktır. İkinci en popüler yol yalnızca sekmelerdir. '
Bu, her ikisinin de kullanıldığını açıkça belirtir. Açıkça söylemek gerekirse: Aynı dosyada boşlukları ve sekmeleri asla karıştırmamalısınız.

"Yeni projeler için, sekmeler yerine yalnızca boşluklar şiddetle tavsiye edilir."
Bu açık bir öneri ve güçlü bir öneridir, ancak sekme yasağı değildir.


PEP-8'de kendi soruma iyi bir cevap bulamıyorum. Geçmişte başka dillerde kullandığım sekmeleri kullanıyorum. Python, özel sekme kullanımıyla kaynağı kabul eder. Bu benim için yeterince iyi.

Boşluklarla çalışmaya gideceğimi düşündüm. Editörümde, bir dosya türünü yalnızca boşlukları kullanacak şekilde yapılandırdım ve bu nedenle sekmeye basarsam 4 boşluk ekler. Sekmeye çok fazla basarsam, boşlukları silmem gerekir! Arrgh! Sekmelerden dört kat daha fazla silme! Editörüm girintiler için 4 boşluk kullandığımı söyleyemez (ancak bir düzenleyici bunu yapabilir) ve belli ki boşlukları birer birer silmek konusunda ısrar ediyor.

Python'a girintileri okurken sekmeleri n boşluk olarak kabul etmesi söylenemez mi? Girinti başına 4 boşluk ve sekme başına 4 boşluk üzerinde anlaşabilir ve Python'un bunu kabul etmesine izin verebilirsek, o zaman sorun olmazdı.
Sorunlara kazan-kazan çözümleri bulmalıyız.


1
Hangi editörü kullanıyorsun? Kullandığım çoğu, girintileme uygulamasına bakılmaksızın, geri boşlukta sonlandırma seçeneğine sahip (örneğin emacs bu şekilde davranır).
Brian

Haklısın - geri boşlukta sonlandırma seçeneği görmüyorum, ama bunun yerine muhtemelen shift-tab kullanarak ya da girintiyi azaltabilirsin (varsayılan olarak ctrl-shift-i).
Brian

Ben sadece, tab tuşuna bastığınızda boşlukları kullanmada daha iyi görünen ve geri tuşuna bastığınızda 4'lülerde kaldıran PyScripter'ı deniyorum.
quamrana

29
"Boşlukları silmem gerekiyor! Dikkat! Sekmelerden dört kat daha fazla silme!" - Her şey için sekme kullanmamın tek nedeni bu ve boşlukları kullanan insanların deli olduğunu düşünmemin nedeni bu. :) Web'den boşluk kullanan bir şey yapıştırdığım zamanlar dışında hiç sorun yaşamadım. Sonra basit bir bul-değiştir bunu düzeltir.
Aphex

3

Kodumda her zaman sekmeler kullandım. Bununla birlikte, yakın zamanda boşluk kullanmak için bir neden buldum: Nokia N900 internet tabletimde geliştirme yaparken, artık sekme tuşu olmayan bir klavyem vardı. Bu beni sekmeleri kopyalayıp yapıştırmaya veya kodumu boşluklarla yeniden yazmaya zorladı. Diğer telefonlarla aynı sorunu yaşıyorum. Kabul edelim ki, bu standart bir Python kullanımı değil, akılda tutulması gereken bir şey.



2

Python, program yapısını tanımak için girintiye dayandığından, tanımlamayı tanımlamanın açık bir yolu gereklidir. Boşlukları veya sekmeleri seçmenin nedeni budur.

Bununla birlikte, python aynı zamanda işleri yapmanın tek bir yolu olan güçlü bir felsefeye de sahiptir, bu nedenle girinti yapmanın bir yolu için resmi bir öneri olmalıdır.

Hem boşluklar hem de sekmeler, bir düzenleyicinin girinti olarak ele alması için benzersiz zorluklar oluşturur. Sekmelerin işlenmesi, düzenleyiciler ve hatta kullanıcı ayarları arasında tek tip değildir. Alanlar yapılandırılabilir olmadığından, sonucun her yerde aynı görüneceğini garanti ettikleri için daha mantıklı bir seçim sunarlar.


8
Her editör de kendi renk şemasını seçebileceğine göre, sizce hangi renk şemasını kullanacaklarını da onlar zorunlu kılar mı?
o0 '.

8
Evet ama bu tutarsızlık aslında daha mantıklı değil mi? Çünkü bu sadece görsel bir tercih meselesi. Editörümde daha geniş "görünen" bir girintiyi tercih edersem sekmelerimi 8 boşluk olacak şekilde ayarlayabilirim, daha azını tercih edersem 2'ye ayarlayabilirim. Bu şekilde kod, biçimlendirmeyi gerçekten değiştirmeden, sahip olan kişiye daha iyi uyuyor onu gözlemlemek.
dennmat

8
Dennmat'a katılıyorum: Görsel olarak 2 boşluğu tercih edersem ve Guido görsel olarak 4 boşluğu tercih ederse, mantıklı seçim sekme girintisini kullanmaktır.
2013

2

JWZ en iyisini söylüyor :

[İnsanlar] kodu okurken ve yeni kod yazmayı bitirdiklerinde, yeni bir kapsam (veya sexpr veya her neyse) açıldığında kodun kaç tane ekran sütunu girintileme eğiliminde olduğunu önemsiyorlar ...

... Benim düşünceme göre teknik sorunları çözmenin en iyi yolu ASCII # 9 TAB karakterinin disk dosyalarında asla görünmemesini zorunlu kılmaktır: satırları diske yazmadan önce, düzenleyicinizi TAB'leri uygun sayıda boşluğa genişletecek şekilde programlayın. ..

... Bu, dize veya karakter sabitleri gibi gerçekten önemli oldukları yerlerde sekmeleri asla kullanmayacağınızı varsayar, ancak bunu asla yapmam: bir sekme olması önemli olduğunda, bunun yerine her zaman '\ t' kullanırım.


10
Aksini yapardım: sekmelerin girinti için anlamsal bir anlamı vardır, bu nedenle sekmelerin saklanması ve boşlukların görüntülenmesi daha hissedilir. Kullanıcı bir formatlama stili seçebilir ve düzenleyici buna göre sekmeleri genişletebilir.
AkiRoss

1
Hala karışık sekmeler ve boşlukların yanı sıra, sekme başına 1 sütun kullanan ve 4+ kez girintilenen bir yazar, her sekme karakterini 4 sütun genişliğinde görüntülemek için bir metin düzenleyicide çılgın görünecek bir sorun yaşıyorsunuz. Girinti için sekmeler, orantılı aralıklı yazı tiplerini kullanan bir kelime işlemci gibi değişken genişlikli bir metin düzenleyicide en mantıklı olanıdır. Sabit genişlikte bir metin düzenleyiciyle pek değil.
Mark Cidade

2
Hayır, demek istediğim, bir metin düzenleyicinin dil gramerini çözümleyebilmesi ve bir çizelge oluştuğunu anlayabilmesi , böylece sekmelerin yalnızca biçimlendirme aracı olarak kullanılabilmesi ve girinti için boşluk kullanmaya gerek kalmaması gerektiği anlamına geliyordu. "sekme" nin sabit bir genişliğe sahip olması gerekmez ve genel olarak bugünün teknikleriyle (örneğin makine öğrenimi) biçimlendirmenin programcılar için hala bir sorun olması utanç verici buluyorum. Her şey otomatikleştirilmeli, otomatikleştirilmeli ve şeffaf olmalıdır.
AkiRoss

Bunu nasıl anlayacağını anlamıyorum.
Mark Cidade

0

Sekmeler üzerindeki boşluklardan söyleyebileceğim en önemli avantaj, birçok programcının ve projenin kaynak kodu için belirli sayıda sütun kullanması ve birinin sekme durağı 2 boşluğa ayarlanmış bir değişiklik yapması ve projenin aşağıdaki gibi 4 boşluk kullanmasıdır. sekme durağı uzun satırlar diğer kişilerin editör penceresi için çok uzun olacaktır. Sekmelerle çalışmanın daha kolay olduğuna katılıyorum, ancak alanların işbirliği için daha kolay olduğunu düşünüyorum, bu da Python gibi büyük bir açık kaynak projesinde önemli.


2
bu yanlıştır: bu sadece sekmeleri ve boşlukları karıştırırsanız olur ve herkesi boşluk yerine sekmeler kullanmaya zorlayarak eşit şekilde çözersiniz.
o0 '.

0

Pastanı alıp yiyebilirsin. Düzenleyicinizi sekmeleri otomatik olarak boşluklara genişletecek şekilde ayarlayın.

(Bu :set expandtabVim'de olurdu .)


0

Tahminimce, linux metin düzenleyicilerinin çoğu, varsayılanları varsayılan olarak gülünç derecede büyük gösteriyor. Sekmelerde boşluk kullanmak için başka iyi bir neden düşünemiyorum.


-1

Halihazırda belirtilen diğer tüm nedenlerin yanı sıra (tutarlılık, boşlukları ve sekmeleri asla karıştırmama vb.) 4 boşluk sözleşmesinin dikkate alınması gereken birkaç neden daha olduğuna inanıyorum. Bunlar yalnızca Python (ve belki de girintinin anlamı olan diğer diller) için geçerlidir. Kişisel tercihlere bağlı olarak sekmeler diğer dillerde daha güzel olabilir.

  1. Bir düzenleyici sekmeleri göstermiyorsa (ki bu, yapılandırmaya bağlı olarak oldukça azdır), başka bir yazar kodunuzun 4 boşluk kullandığını varsayabilir, b / c neredeyse tüm Python kodunun kamuya açık olduğunu varsayar; aynı düzenleyicinin sekme genişliği 4 olursa, kötü şeyler olabilir - en azından bu fakir kişi, sözleşmeye bağlı kalarak kaçınması çok kolay olan bir girinti sorunu yüzünden zaman kaybedecektir. Bu yüzden benim için bir numaralı neden, tutarlı bir şekilde hatalardan kaçınmaktır.

  2. Hangisinin daha iyi olduğu sorusu, sekmeler veya boşluklar yeniden çerçevelendirilirken, sekmelerin hangi avantajları olduğu sorulmalıdır; Sekmeleri öven çok sayıda gönderi gördüm, ancak onlar için birkaç ikna edici argüman gördüm; emacs, vi (m), kate, ... gibi iyi editörler kodunuzun anlamsallığına bağlı olarak uygun girinti yapar - sekmeler olmadan bile; aynı editörler, geri almadaki girintiyi kaldırmak için kolaylıkla yapılandırılabilir.

  3. Bazı kişilerin, kodun görünümüne / düzenine karar verme özgürlüğü söz konusu olduğunda çok güçlü tercihleri ​​vardır; diğerleri bu özgürlüğe karşı tutarlılığa değer verir. Python, girintinin bloklar vb. İçin kullanılmasını dikte ederek bu özgürlüğü büyük ölçüde azaltır. Bu bir hata veya özellik olarak görülebilir, ancak Python seçilmesi ile birlikte gelir. Şahsen, bu tutarlılığı seviyorum - yeni bir projede kod yazmaya başladığımda, en azından düzen alıştığıma yakın, bu yüzden okuması oldukça kolay. Neredeyse her zaman.

  4. Girinti için boşluk kullanmak, kodu anlamayı kolaylaştırabilecek "düzen hilelerine" izin verir; bunların bazı örnekleri PEP8'de listelenmiştir; Örneğin.

    foo = long_function_name(var_one, var_two,
                             var_three, var_four)
    
    # the same for lists
    a_long_list = [1,
                   2,
                   # ...
                   79]
    
    # or dictionaries
    a_dict = {"a_key": "a_value",
              "another_key": "another_value"}
    

    Tabii ki, yukarıdakiler de güzelce yazılabilir:

    foo = long_function_name(
        var_one, var_two,
        var_three, var_four)
    
    # the same for lists
    a_long_list = [
        1,
        2,
        # ...
        79]
    
    # or dictionaries
    a_dict = {
        "a_key": "a_value",
        "another_key": "another_value"}
    

    Ancak, ikincisi daha fazla kod satırı alır ve bazen daha az satırın daha iyi olduğu tartışılır (tek bir ekranda daha fazlasını elde edersiniz). Ancak hizalamayı seviyorsanız, boşluklar (tercihen iyi bir editör tarafından desteklenen) size bir anlamda Python'da sekmelerden daha fazla özgürlük sağlar. [Pekala, sanırım bazı editörler aynı w / sekmeleri yapmanıza izin veriyor;) - ama boşluklarla, hepsi yapıyor ...]

  5. Herkesin öne sürdüğü aynı argümana geri dönersek - PEP 8 boşlukları belirler (tamam, şiddetle tavsiye eder). Yalnızca sekme kullanan bir projeye geliyorsanız, elbette çok az seçeneğiniz var. Ancak PEP 8 sözleşmelerinin kurulması nedeniyle neredeyse tüm Python programcıları bu stile alışmıştır. Bu, çoğu programcı tarafından kabul edilen bir stil üzerinde bir fikir birliği bulmayı çok daha kolay hale getirir ... ve aksi takdirde bireylerin stil konusunda hemfikir olması çok zor olabilir.

  6. Tarzın uygulanmasına yardımcı olan araçlar genellikle fazladan çaba sarf etmeden PEP 8'in farkındadır. Bu harika bir neden değil, ancak işlerin kutudan çıkar çıkmaz yürümesi güzel.


-3

Sekmelerle ilgili evrensel sorun, farklı ortamlarda farklı şekilde temsil edilebilmeleridir.
Belirli bir düzenleyicide, bir sekme 8 boşluk olabilir veya 2 olabilir
. Bazı editörlerde bunu kontrol edebilirsiniz, bazılarında ise yapamazsınız.

Sekmelerle ilgili bir başka sorun da, bunların basılı çıktıda nasıl temsil edildiğidir. Çoğu yazıcının bir sekmeyi 8 boşluk olarak yorumladığına inanıyorum.

Boşluklarla hiç şüphe yok. Her şey yazarın istediği gibi sıralanacaktır.


14
Sekmeyi temelden yanlış anlayan bir diğeri ... mekanik bir daktilo alıp bir süre onunla oyna, gerçekten! 1 sekme 8 boşluğa eşit değildir! up_to_8_spaces'a eşittir ! otoh: orantılı yazı tiplerinde sekmeler, hizalamayı garanti etmenin tek yoludur.

3
"Belirli bir düzenleyicide, bir sekme 8 boşluk olabilir veya 2 olabilir". Eğer 4-boşluktan hoşlanıyorsam ve arkadaşım 8-boşluk veya 2-boşluk veya 3-boşluktan hoşlanıyorsa, vb. O zaman ikimiz de sekmeler üzerinde anlaşabiliriz çünkü ( girinti karakterleri belirlendiğinde) editör bunların ne olduğunu bilir ve bunları gösterebilir. buna göre. Kodu 4 boşluk genişliğinde girintilerle görüyorum, onu 8 boşluk genişliğinde girintilerle görüyorsunuz, garip arkadaşımız 3-boşluk kullanıyor ve her şey harika. Sekme genişliğinin kendisinin önemli olduğu koşullar (özellikle Python'da!) O kadar nadirdir ki, alan savunucuları bile bunları nadiren ortaya çıkarır.
JamesTheAwesomeDude

-4

Jim ve Thomas Wouters arasındaki tartışma üzerine yorumlarda.

Sorun şuydu ... hem sekmelerin hem de boşlukların genişliği değişebildiğinden - ve programcılar her iki genişlik konusunda da anlaşamadıkları için - neden sekmelerin suçu taşıyor?

Jim'e bu konuda katılıyorum - sekmeler kendi başlarına kötü DEĞİLDİR. Ama bir problem var...

Boşluklarla "KENDİ KODUM" un dünyadaki HER düzenleyicide nasıl göründüğünü kontrol edebilirim . 4 boşluk kullanırsam - o zaman kodumu hangi düzenleyicide açarsanız açın, sol kenar boşluğundan aynı uzaklıkta olacaktır. Sekmelerle editör için sekme genişliği ayarının insafına kaldım - KENDİ KODUM için bile. Ve bundan hoşlanmıyorum.

Dolayısıyla, alanların bile tutarlılığı garanti edemediği doğru olsa da - en azından her yerde KENDİ kodunuzun görünümü üzerinde size daha fazla kontrol sağlar - sekmelerin yapamayacağı bir şey.

Bence, kod yazan programcıların tutarlılığı DEĞİL - ancak bu kodu gösteren editörlerdeki tutarlılık - boşlukların elde edilmesini (ve empoze etmesini) kolaylaştırıyor.


6
"Editörün sekme genişliği ayarının insafına mı kalmışsınız"? Düzenleyiciniz istediğiniz sekme genişliğini ayarlamanıza izin vermiyorsa, notepad.exe'yi kullanıyor olabilirsiniz
user137369

4
@zigg Bu argümanla kesinlikle alakasız çünkü o (o?) özellikle kendi kodundan bahsediyor (bu bilgi kalın, italik ve tümü büyük harflerle yazılmış). Tartışmanın hiçbir yerinde kod paylaşımı ilgili değildir.
user137369

1
Kodu görüntüleyebileceğiniz tek araç editörler değildir. Ayrıca farklar, izleme boşlukları, Github ve diğer web sayfaları da vardır ve bu, kontrolünüz dışında bir sekme genişliği seçecektir (muhtemelen 8).
RemcoGerlich

Senin değinmek istediğin noktayı anlıyorum. Gerçekten de herkesin kodunuzu nasıl gördüğünü kontrol edersiniz (girintiyle ilgili olarak). Bir sonraki adımınız, herkesin kodunuzu görmek için kullanacağı yazı tipi türünü ve rengini kontrol etmektir. Bundan sonra, sadece kod editörlerine değil, dünyanın kendisine de hakim olmaya hazırsınız !!
Djunzu
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.