Python'un neden çok satırlı yorumları yok?


252

Tamam, üçlü tırnak dizelerinin çok satırlı yorum olarak kullanılabileceğini biliyorum. Örneğin,

"""Hello, I am a 
   multiline comment"""

ve

'''Hello, I am a 
   multiline comment'''

Ama teknik olarak konuşmak gerekirse, bunlar ipler, değil mi?

Google'ı araştırdım ve Python stil kılavuzunu okudum, ancak neden çok satırlı, / * * / yorum türlerinin resmi bir uygulaması olmadığına dair teknik bir cevap bulamadım. Üçlü tırnak kullanmakta sorunum yok, ancak bu tasarım kararına neyin yol açtığı konusunda biraz meraklıyım.


8
Eğer bir dize olarak yapabilirseniz neden daha fazla yol eklemelisiniz?
Brody

12
Sadece eklemek istedim, yorum yapmaya çalıştığınız şeyin de yorumlar / çok satırlı dizeler olması başarısız olur. Ve elbette, bu yüzden onlara ihtiyacımız var.
nycynik

50
@ S.Lott Bence bu yararlı bir soru. Python'un neden iyi olduğunu anlamak için alınan tasarım kararlarını (ve halen devam etmekte olan kararları) anlamak önemlidir. Soru tartışmacı veya kavgacı değildir; meraklı. Merak konusunda bu kadar sert olmaya gerek yok.
Mark E. Haase

6
Morina için çok satırlı bir yorum gerekiyorsa sadece if False:kod
AturSams 11:15

5
@Brody Çünkü dizeler işlenir. Yorumlar yok sayılır. Dizeleri yorum olarak kullanmayla ilgili sorunlar var.
Etrafınıza

Yanıtlar:


266

"Guido çok satırlı yorumlara ihtiyaç duymadı" ifadesinden daha iyi bir yanıt alacağınızdan şüpheliyim.

Guido bunu tweetledi :

Python ipucu: Çok satırlı dizeleri çok satırlı yorumlar olarak kullanabilirsiniz. Öğreti olarak kullanılmadıkça kod üretmezler! :-)


28
Bu konuda Guido'nun tweet'ini görün .
Petr Viktorin

15
çok satırlı dize ve blok yorumlarını karıştırmanın bir dezavantajı IDE'nin ne istediğinize dair hiçbir fikri yoktur, bu nedenle gerektiğinde farklı stilde yorum gösteremez.
Baiyan Huang

21
Ayrıca, çok satırlı dizelerle kodun yorumlanmasını imkansız hale getirir (ve dikkatli değilseniz girinti hatalarına neden olabilir). Ew!
Mike Graham

3
Kodunuz yorumlanmış kod içeriyorsa, kodunuz reddedilir ve hatta CV'nizi güncellemek için davet edildiğinizi bulabileceğiniz birçok alanda çalıştım. Kod sürüm kontrolü altındaysa, gerekli olmayan kodu kaldırın, sorun değil veya if False:devre dışı bırakılması gereken koddan önce kullanın .
Steve Barnes

4
@SteveBarnes, üretimdeki yorumlanmış kodların büyük bloklarının kötü olduğunu kabul ediyor. Ama neden if Falsedaha iyi olduğunu anlamıyorum . Daha az net olmakla aynı şeyi başarır (çünkü bir bakışta kod bloğunun devre dışı bırakıldığı açık değildir).

59

Çok satırlı yorumlar kolayca kırılabilir. Basit bir hesap makinesinde aşağıdakilere sahipseniz ne olur?

operation = ''
print("Pick an operation:  +-*/")
# Get user input here

Bunu çok satırlı bir yorumla yorumlamaya çalışın:

/*
operation = ''
print("Pick an operation:  +-*/")
# Get user input here
*/

Hata! Dizeniz son yorum sınırlayıcıyı içeriyor.


174
Bu cevapla ilgili en güzel şey, SO'nun sözdizimi vurgulayıcı tarafından nasıl ele alındığıdır.
Nietzche-jou

73
Bu, kaçış karakterlerin olmasının birçok nedeninden biri, bunu çok satırlı yorumlara destek OLMAMAK için iyi bir neden olarak görmüyorum.
Natalie Adams

34
Mantığınızı anlamıyorum - belki de yorumum yeterince açık değildi. \ Karakterini kaçış karakteri olarak kullandıysak: print ("Bir işlem seçin: + - * \ /") "* /" artık bir bitiş yorum bloğunu tam anlamıyla / yazdırılacağı için göstermez. Devam edin ve bunu C ++ ile test edin. Aslında SO'nun sözdizimi vurgulayıcı geçerli olduğunu gösterecektir. Bu karmaşık bir konu değil, diğer dillerde yıllardır varlığını sürdürüyor. Kodunuzda "* /" kullanabileceğinizi göstermek için yayınınızı kaçış karakterlerinin kullanımını içerecek şekilde güncellemenizi rica ediyorum.
Natalie Adams

23
kodunuzda '' 'varsa ne olur? ayy kodunuz son yorum sınırlayıcı içeriyor
siamii

21
Çok satırlı yorumlar doğal olarak kırılamaz; sadece bunların çoğu uygulaması (Python'lar dahil). Python'da çok satırlı yorum yapmanın bariz yolu, sadece bir yorum bloğu başlatmama izin vermek #:ve yorum bittiğinde göstermek için girintiyi kullanmak. Temiz, tutarlı ve mükemmel yuvalama kolları.
GatesDA

34

Üç alıntı metin çok satırlı yorum olarak düşünülmemelidir; gelince , onlar doktrinler . Kodunuzun ne yaptığını ve nasıl kullanılacağını açıklamalılar, ancak kod bloklarını yorumlamak gibi şeyler için değil.

Guido'ya göre, Python'daki çok satırlı yorumlar sadece bitişik tek satırlık yorumlardır ("blok yorumları" için arama yapın).

Kod bloklarını yorumlamak için bazen aşağıdaki kalıbı kullanırım:

if False:
    # A bunch of code

6
Görünüşe göre Guido o zamandan beri zihnini karaladı .
Petr Viktorin

5
"if false:" çözümü ile ilgili olarak, mesele, python'da sekmelerle çalışırken "if False:" altındaki tüm kodları sekmeniz gerekir. Ve daha sonra yığınını ayırın. Bu yüzden metin düzenleyicinizle oldukça şık olmalısınız.
barlop

3
Eğer iyi bir editör kullanırsanız, o * / gibi zaman aynı miktarda olmalıdır
AturSams

@barlop yup - editörlerinizi öğrenin! Bu genellikle bir saniye içinde vim ile elde edilebilirV}>>
Triptych

30

Bu muhtemelen bir görev yapmanın bariz bir yolunun olması gerektiği temel kavramına dayanmaktadır. Ek yorum stilleri gereksiz komplikasyonlar ekler ve okunabilirliği azaltabilir.


8
Sorun bu, inanıyorum: Yorum olarak bir dize kullanmak açık değildir ve yorum yapmanın iki yolu olduğundan, "görev yapmak için bir yol" ilkesini ihlal eder: dizeleri ve #.
GatesDA

1
Ama C tabanlı dillerde olandan önemli ölçüde farklı değil: / * vs //, bu yüzden nasıl daha kötü olduğunu görmüyorum.
Ben Roberts

//, Neden birisinin çok satırlı bir yorum isteyeceğini düşünün. İyi nedenler: ... "Bu # doohickey'lerin çoğunu yazmak zorunda değilim" ve "Bu özel yorumu çok hassas bir şekilde göstermem gerekiyor ve bu kesin şekilde değil. # öncesine izin verme. " Birisinin ASCII diyagramı yapmak istediğini veya belirli bir sorun ortaya çıkarsa kopyalanacak ve yapıştırılacak bazı referans javascript kodu koyduğunu varsayalım. Burada bir görev yapmanın bariz yolu, o görevin son durumlarını kapsamaz. Bununla birlikte, ilave yorum stillerinin KÖTÜ olduğunu kabul ediyorum.
Nathan Basanese

3
"Bu # doohickey'lerin çoğunu yazmak zorunda değilim". Bu yüzden hemen hemen tüm dillerin blok yorumları (/ * .. * /) vardır. İster inanın ister inanmayın, ancak kodumun ne yaptığını belgelemek istiyorum: girişler, çıkışlar, kullanılan algoritmalar, parametreler ... Bu da değiştirilen bir sürü metin. Sadece tek satırlık yorumların kısıtlanması çok saçma. Ben iyi bilinen olası yan etkileri anlaşıldığı sürece, bu alternatif yaklaşımları denerken genellikle kullanışlı olmasına rağmen - kod yorum için bir yaklaşım savunmayın NOT.
Albert Godfrind

3
Python ile ilgili başka bir şey, aslında tek kişilik tasarlanmış bir dil olmasıdır. Guido ne derse desin ... Dil sürümleri arasındaki bu tuhaf uyumsuzluklara sahibiz. Neden ? Çünkü Guido böyle söyledi ...
Albert Godfrind

12

Üçlü alıntılar docstrings'de çok satırlı yorum olarak kullanılır. Ve # yorum satır içi yorum olarak kullanılır ve insanlar bunu kullanır.

Komut dosyası dillerinin çoğunun çok satırlı yorumları da yoktur. Belki de nedeni budur?

Bkz. PEP 0008 , bölüm Yorumlar

Ve Python editörünüzün blok yorum yapmak için bazı klavye kısayolları sunup sunmadığına bakın. Emacs, Eclipse'nin yanı sıra, muhtemelen iyi IDE'lerin çoğunu destekliyor.



5

Şahsen Java'daki yorum tarzım şöyle

/*
 * My multi-line comment in Java
 */

Dolayısıyla, stiliniz önceki örneğe özgü ise, tek satırlı yorumlara sahip olmak o kadar da kötü bir şey değildir, çünkü

#
# My multi-line comment in Python
#

VB.NET aynı zamanda sadece tek satır yorum yapan bir dildir ve kişisel olarak yorumların daha az beğenilen yorumlar ve daha fazla alıntıya benzemesi gibi rahatsız edici buluyorum

'
' This is a VB.NET example
'

Yalnızca tek satırlık yorumlar, çok satırlı yorumlardan daha az karakter kullanımına sahiptir ve belki de normal ifadede bazı tehlikeli karakterler tarafından kaçma olasılığı daha düşüktür? Ned ile de aynı fikirdeyim.



4
# This
# is
# a 
# multi-line
# comment

Bunu yapmak için yorum bloğunu kullanın veya düzenleyicinizde arama yapın ve değiştirin (s / ^ / # / g).


3

Bunu, metin düzenleyicim (TextPad) için satırları vurgulamama izin veren bir makro indirerek çözdüm ve daha sonra her satırın başına # ekler. Benzer bir makro # 's kaldırır. Bazıları neden birden fazla satırın gerekli olduğunu sorabilir ancak hata ayıklama amacıyla bir kod bloğunu "kapatmaya" çalıştığınızda kullanışlı olur.


1

Python'da çok satırlı yorum arayan herkes için - üçlü alıntı formatını kullanmak, zor yoldan yeni öğrendiğim gibi bazı sorunlu sonuçlara yol açabilir. Bunu düşün:

this_dict = {
    'name': 'Bob',

"""
This is a multiline comment in the middle of a dictionary
"""

    'species': 'Cat'
}

Çok satırlı yorum, 'species'anahtarı karıştırarak bir sonraki dizeye yapıştırılacaktır . #Yorumlar için kullanmak daha iyidir.


0

Çünkü # kuralı yaygın bir konudur ve # işaretli bir yorumla yapamayacağınız çok satırlı bir yorumla gerçekten yapabileceğiniz hiçbir şey yoktur. /* ... */PL / I'e geri dönen yorumların soyları gibi tarihsel bir kaza ,


0

Sadece gereksiz görüldüğünü varsayın. Sadece yazmak çok kolay olduğu için #a comment, çok satırlı yorumlar sadece tek satırlık yorumlardan oluşabilir.

İçin HTML , diğer taraftan, multiliners için ihtiyaç fazlası var. Yazmaya devam etmek daha zor <!--comments like this-->.


4
mesele bu değil - hem tek satırlı hem de çok satırlı yorumlar için bariz kullanım örnekleri vardır. Her ikisini de diğer dillerde yaygın olarak kullandım (python puristlerinin diğer dilleri umursamadığını biliyorum). ;)
johndodo

1
bunu 200 satır kodla yapmayı deneyin, çıkarmanız, geri koymanız ve sonra tekrar çıkarmanız gerekir. 200 ilk # 'i yazmak eski gerçek hızlı olur.
DragonLord

0

Bu sadece bir tahmin .. ama

Dizeler oldukları için bazı semantik değerleri vardır (derleyici onlardan kurtulmaz), bu nedenle doktrin olarak kullanılmaları mantıklıdır. Onlar aslında bir parçası haline AST belgelerine ayıklanması kolay olur böylece.


0

Ayrıca, çok satırlı yorumlar bir orospu . Söylemek için üzgünüm, ancak dil ne olursa olsun, hata ayıklama amaçlarından başka bir şey için kullanmıyorum. Bunun gibi bir kodunuz olduğunu varsayalım:

void someFunction()
{
    Something
    /*Some comments*/
    Something else
}

Sonra kodunuzda hata ayıklayıcı ile düzeltemeyeceğiniz bir şey olduğunu öğrenirsiniz, bu nedenle bu çok satırlı yorumlarla daha küçük ve daha küçük kod yığınlarını yorumlayarak manuel olarak hata ayıklamaya başlarsınız. Bu daha sonra işlevi verecektir:

void someFunction()
{ /*
    Something
   /* Comments */
   Something more*/
}

Bu gerçekten rahatsız edici.


3
uh harika, ama Python'un /*tarzı yorumları yok.
Triptik

17
Doğru, python'un gerçek çok satırlı yorumları olmadığından, python'da örnek vermek biraz zor oldu.
martiert

2
Şahsen problemi anlamıyorum. Ekstra * / öğesini silmeniz yeterlidir. Ya da hassas olmanız gerekiyorsa tek satırları yorumlamak için // tuşlarını kullanın.
Natalie Adams

4
İç içe yorumlara izin veren birkaç dil (birçoğu herhangi bir nedenle işlevsel) vardır. Örnekler için rosettacode.org/wiki/Comments içinde "yuvalanmış" ifadesini arayın .
Keith

1
evet evet çok satırlı bir yorumda çok satırlı bir yorum koymak rahatsız edici olurdu. Programımın bir keresinde yalnızca bir kısmını hatırlıyorum, en azından programımın hangi kısmına baktığımı ve hangisinin yorum yaptığımı hatırlıyorum. Ancak bunu hatırlayamıyorsanız bile, bazı IDE'lerin bir yorumun italik olması gerçeğini kullanabilirsiniz. Her neyse, böylesine küçük bir işlev için, tek satırlık yorumları da kullanabilirsiniz. Ancak, programın büyük bir bölümünü yorumluyorsanız, gerçekten çok satırlı bir yoruma ihtiyacınız vardır. veya bu özelliğe sahip bir metin düzenleyici.
barlop

0

IDLE kullanarak çok satırlı yorumlar :

  • Mac OS X , kod seçiminden sonra, birlikte kod bloğu açıklama Ctrl+ 3ve yorumsuz kullanarak Ctrl+ 4.

  • , Windows , kod seçiminden sonra, birlikte kod bloğu açıklama Ctrl+ Alt+ 3ve yorumsuz kullanarak Ctrl+ At+ 4.


-1

Çok satırlı yorumlarını üç tırnaklı bir değişkene koyacak bir adamı okuduğumu hatırlıyorum:

x = '''
This is my
super-long mega-comment.
Wow there are a lot of lines
going on here!
'''

Bu biraz bellek kaplıyor, ancak size çok satırlı yorum işlevselliği veriyor ve çoğu editör sözdizimini sizin için vurgulayacak :)

Kodu basitçe sararak yorum yapmak da kolaydır

x = '''

ve

'''

18
çıkarın x =ve bellekte yer kaplamaz.
endolith
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.