PEP 8, anahtar kelime bağımsız değişkeninde veya bir varsayılan parametre değerinde neden '=' etrafında boşluk yok?


104

PEP 8= neden bir anahtar kelime bağımsız değişkeninde veya bir varsayılan parametre değerinde boşluk olmamasını önerir ?

Bu =, Python kodundaki diğer tüm oluşumların etrafında boşluklar önermekle tutarsız mı ?

Nasıl:

func(1, 2, very_long_variable_name=another_very_long_variable_name)

daha iyi:

func(1, 2, very_long_variable_name = another_very_long_variable_name)

Python'un BDFL'si tarafından yapılan herhangi bir tartışma / açıklama bağlantısı takdir edilecektir.

Unutmayın, bu soru varsayılan değerlerden çok kwargs ile ilgili, ben sadece PEP 8'deki cümleleri kullandım.

Fikir istemiyorum. Bu kararın arkasındaki nedenleri soruyorum. Daha istemek gibi neden ben kullanırım {aynı satırda ifbir C programında açıklamada değil, ister onu kullanmak veya olmamalıdır.

Yanıtlar:


73

Sanırım bunun nedeni, bir anahtar kelime bağımsız değişkeninin bir değişken atamasından temelde farklı olmasıdır.

Örneğin, bunun gibi pek çok kod var:

kw1 = some_value
kw2 = some_value
kw3 = some_value
some_func(
    1,
    2,
    kw1=kw1,
    kw2=kw2,
    kw3=kw3)

Gördüğünüz gibi, bir değişkeni tam olarak aynı adı verilen bir anahtar kelime argümanına atamak tamamen mantıklıdır, böylece onları boşluksuz görmek için okunabilirliği artırır. Anahtar kelime argümanları kullandığımızı ve kendisine bir değişken atamadığımızı anlamak daha kolaydır.

Ayrıca, parametreler aynı satırda gitme eğilimindeyken, atamaların her biri genellikle kendi satırındadır, bu nedenle burada yer tasarrufu önemli bir mesele olacaktır.


7
durum bu olabilir, ancak yine de bu IMO ikonlarını bu kadar iyi tasarlanmış bir dil için kod stili önerilerinde tanıtmak, sadece 2 karakter kaydetmek için garip görünüyor. Sanki java kod stili , sınıf tanımında değil (aynı sayıda karakter kaydeder) {sonrasına yeni bir satır koymanın daha kolay olduğunu söylemiş gibi if. Ayrıca bir anahtar kelime parametresi varsayılan değerden farklıdır ancak yine de aynı stil önerisini kullanır.
soulcheck

3
Dediğim gibi, onlar farklı şeyler. Onları farklı yazmak mantıklı.
fortran

6
Bundan daha okunaklı olmadığını söyleyebilirim kw1 = kw1, kw2 = kw2;) ama belki Guido ve Barry'nin düşündüğü buydu.
soulcheck

1
Bu cevabı oldukça inandırıcı olduğu için kabul edeceğim. yine de doğrulayan bir bağlantıya
aldırış etmez

5
Anahtar kelime argümanının temelde değişken atamadan farklı olması gerçeği, farklı IMO kurallarına sahip olmak için geçerli bir argüman değildir, çünkü fark bağlamdan zaten açıktır. İlki bir işlev çağrısı içinde gerçekleşir ve ikincisinin mevcut girinti düzeyinde tek başına durması gerekir. IMO, 5-6 karakterden uzun değişken isimleri için (yani çoğu için gerçek hayat), boşluklu varyant daha kolay okunabilir.
Axel

13

Varsayılan argüman olarak very_long_variable_name kullanmam. Öyleyse şunu bir düşünün:

func(1, 2, axis='x', angle=90, size=450, name='foo bar')

bunun üzerine:

func(1, 2, axis = 'x', angle = 90, size = 450, name = 'foo bar')

Ayrıca, değişkenleri varsayılan değerler olarak kullanmak pek mantıklı değil. Belki bazı sabit değişkenler (aslında sabit olmayanlar) ve bu durumda tümü büyük harf, açıklayıcı ancak olabildiğince kısa isimler kullanırdım. Yani başka_çok _...


1
bunlar anahtar kelime argümanlarıdır, benzer bir örnek
PEP'dedir

3
(Esasen) diyorsunuz ki: boşluk kuralını mantıklı kılmak için çok kısa değişken isimler yazın. Ancak eğer birinin uzun-benzeri değişken isimleri varsa, boşluksuz kuralı karmaşık bir ortam oluşturur. 'Bu bir ödev değil, bu yüzden farklı şeyler' argümanı benim için yeterli değil, çünkü anlambilimden çok okunaklılığı önemsiyorum ve çünkü bu bir 'ödev için varsayılan değer' değilse, o zaman ne o?
PatrickT

1
@PatrickT "Bu bir görev değil, bu yüzden farklı şeyler" argümanı bunun neden olduğunu açıklamak için hiçbir şey yapmıyor (felsefi bir fikir); Sadece neden olabileceğini açıklıyor (sözdizimsel bir kavram).
Mateen Ulhaq

11

Artıları ve eksileri var.

PEP8 uyumlu kodun nasıl okunduğundan hiç hoşlanmıyorum. İnsanlardan very_long_variable_name=another_very_long_variable_namedaha okunaklı olabilecek argümana inanmıyorum very_long_variable_name = another_very_long_variable_name. İnsanların okuma şekli bu değil. Bu, özellikle sözdizimi vurgulamanın yokluğunda ek bir bilişsel yük.

Bununla birlikte, önemli bir faydası var. Aralık kurallarına uyulursa, yalnızca araçları kullanarak parametreleri aramayı çok daha etkili hale getirir .


Etrafına boşluk bırakmaya bağlı kalırsanız, araçları kullanarak arama yapmak da farklı olmamalıdır.
NoName

10

Bağımsız değişkenler için boşluk bırakan IMO, arg / değer çiftlerinin daha temiz görsel gruplamasını sağlar; daha az dağınık görünüyor.


Genelde boşlukları severim, bu yüzden parantezlerin içine boşluklar koyma eğilimindeyim, böylece tüm parametreler boşlukla çevrilidir. Ama bence arg1=40ilişki daha açık olduğu için daha okunaklı.
Charlie Gorichanaz

3

Sanırım bunun birkaç nedeni var, ancak rasyonelleştiriyor olsam da:

  1. Yer tasarrufu sağlar, daha fazla işlev tanımının ve çağrının bir satıra sığmasına izin verir ve bağımsız değişken adlarının kendileri için daha fazla yer tasarrufu sağlar.
  2. Her bir anahtar kelimeyi ve değeri birleştirerek, farklı argümanları virgülden sonraki boşlukla daha kolay bir şekilde ayırabilirsiniz. Bu, kaç argüman sağladığınızı hızlı bir şekilde gözlemleyebileceğiniz anlamına gelir.
  3. Sözdizimi daha sonra aynı ada sahip olabilen değişken atamalarından farklıdır.
  4. Ek olarak, sözdizimi, a == bbir çağrı içinde geçerli ifadeler de olabilen eşitlik kontrollerinden (daha da fazla) farklıdır .

3

Benim için kodu daha okunaklı hale getiriyor ve bu nedenle iyi bir kural.

Bence değişken atamaları ve işlev anahtar kelime atamaları arasındaki stil açısından temel fark =, birincisi için bir satırda yalnızca bir tek olması gerektiğidir , oysa genellikle =ikincisi için bir satırda birden çok s vardır .

Herhangi bir diğer husus olsaydı, biz tercih edeceğini foo = 42için foo=42işaretler genellikle biçimlendirilir eşittir ve eski çünkü güzel görsel boşluk ile değişken ve değer ayırır nasıl ikincisi olmadığı için.

Tek satırda birden atamaları varken Ama biz tercih f(foo=42, bar=43, baz=44)etmek f(foo = 42, bar = 43, baz = 44)eski görsel boşluk ile birkaç atamaları ayıran çünkü ikinci anahtar / değer çiftleri nerede olduğunu görmek için biraz zorlaştırarak bunu yapmaz,.

İşte koyma başka bir yolu: orada olan kongre arkasında bir tutarlılık. Bu tutarlılık şudur: "en yüksek düzeyde ayrım" boşluklar aracılığıyla görsel olarak daha net hale getirilir. Daha düşük ayrım seviyeleri değildir (çünkü daha yüksek seviyeyi ayıran beyaz boşlukla karıştırılacaktır). Değişken ataması için, en yüksek ayrım seviyesi değişken ile değer arasındadır. Fonksiyon anahtar kelime ataması için, en yüksek ayrım seviyesi, bireysel atamaların kendi aralarındadır.

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.