Python'da çok satırlı yorumlar oluşturmanın bir yolu var mı?


1156

Kısa süre önce Python okumaya başladım , ancak çok satırlı yorumların nasıl uygulanacağını bulamadım. Çoğu dilde aşağıdaki gibi blok yorum sembolleri bulunur:

/*

*/

Bunu Python'da denedim, ancak bir hata atıyor, bu yüzden bu muhtemelen doğru yol değil. Python'un aslında çok satırlı bir yorum özelliği var mı?


2
Yorumlanan bir dil olduğunu düşünüyorum, sh veya bash veya zsh gibi, #yorum yapmanın tek yolu budur. Sanırım Python betiklerini bu şekilde yorumlamayı kolaylaştırıyor.
Victor Zamanian

1
Bu cevabın eski olduğunu biliyorum, ama aynı soruya sahip olduğum için de karşılaştım. Kabul edilen cevap işe yarıyor, ancak Python'un neden doğru olmayabileceğini (ADTC başına) inceliklerini bilmek için yeterince bilmiyorum.
Brandon Barney

5
@BrandonBarney Sorunu açıklayayım. '' 'Kullanan kabul edilen cevap aslında hiçbir şey yapmayan çok satırlı bir dize oluşturur. Teknik olarak, bu bir yorum değil. Örneğin, k = '' 'sahte yorum, gerçek dize' '' yazabilirsiniz. Ardından, ADTC'nin ne anlama geldiğini görmek için (k) 'yi yazdırın.
pinyotae

3
Bu şimdi çok daha mantıklı. Kullanılmayan bir dize oluşturma bir hata ile sonuçlanır vba alışkınım. Python'un sadece görmezden geldiğini fark etmedim. Hala en azından hata ayıklama ve öğrenme için çalışır, ancak gerçek gelişim için iyi bir uygulama değildir.
Brandon Barney

Python kaynak kodunda, uzun bir satırı keserseniz editör, kesik çizginin gerçekten önceki satırın bir parçası olduğunu göstermek için otomatik olarak girintili hale getirir mi? Uzun bir sahte kod satırı koparırsam ne yapmalıyım?
alpha_989

Yanıtlar:


1802

Üçlü tırnaklı dizeler kullanabilirsiniz. Bir öğretici olmadıklarında (bir sınıf / işlev / modüldeki ilk şey), yok sayılırlar.

'''
This is a multiline
comment.
'''

(Biri '''önlemek için öncüyü uygun şekilde girintili tuttuğunuzdan emin olun IndentationError.)

Guido van Rossum (Python'un yaratıcısı) bunu bir "profesyonel ipucu" olarak tweetledi .

Ancak, Python'un stil rehberi PEP8, ardışık tek satırlık yorumları kullanmayı tercih ediyor ve birçok projede bulacağınız şey de bu. Metin editörlerinin genellikle bunu yapmak için bir kısayolu vardır.


17
Hm. test.pySadece görmek için bir python betiğine büyük bir çok satırlı dize koydum . Bunu yaptığımda import testbir test.pycdosya oluşturulur. Ne yazık ki, pycdosya çok büyük ve dizenin tamamını düz metin olarak içeriyor. Bir şeyi yanlış mı anlıyorum, yoksa bu tweet yanlış mı?
unutbu

23
@unutbu, eğer dosyadaki tek şey buysa, bir doktora oldu. Ondan önce bazı kodlar koyun ve koddan kaybolacaktır pyc. Cevabı düzenledim ve “modül” ü doktrinleri olan şeylerin listesine koydum.
Petr Viktorin

31
Yorum olarak çok satırlı dizeyi sevmiyorum. Sözdizimi vurgulama, bunları yorum olarak değil, dize olarak işaretler. Bölgeleri yorumlamak ve yazarken çok satırlı yorumları kaydırmak için otomatik olarak ilgilenen iyi bir editör kullanmayı seviyorum. Tabii ki, bu bir zevk meselesi.
Sven Marnach

61
Bir kural olarak """, öğretiler ve '''blok yorumları için kullanmanın yararlı olduğunu düşünüyorum . Bu şekilde ''', alışılmış öğretilerinizi çatışma olmadan sarabilirsiniz .
Roshambo

19
Eğer iken yapabilirsiniz çok hatlı yorum olarak çok hatlı dizeleri kullanmak, ben bu cevapların hiçbiri bakın şaşırdığımı PEP 8 alt bölümünde özellikle boş olan ardışık tek hat yorumlardan inşa çok hatlı yorum, önerir #paragrafları ayırt etmek hatları .
Air

82

Python bir var satırlı dize / yorum sözdizimi Docstringler olarak kullanılan sürece, o anlamda çok satırlı dizeleri hiçbir bayt kodu oluşturmak gibi - #-prepended yorumlarla. Aslında, bir yorum gibi davranır.

Öte yandan, bu davranışın gerçek bir yorum sözdizimi olması için resmi belgelerde belgelenmesi gerektiğini söylüyorsanız, evet, dil spesifikasyonunun bir parçası olarak garanti edilmediğini söylemek doğru olur.

Her durumda, metin düzenleyiciniz de seçilen bir bölgeyi kolayca yorumlayabilmelidir #(her satırın önüne birer birer ayrı ayrı yerleştirerek). Değilse, bunu yapan bir metin düzenleyicisine geçin.

Belirli metin düzenleme özellikleri olmadan Python'da programlama acı verici bir deneyim olabilir. Doğru editörü bulmak (ve nasıl kullanılacağını bilmek) Python programlama deneyiminin algılanmasında büyük bir fark yaratabilir.

Metin düzenleyici yalnızca seçilen bölgeleri yorumlayabilmeli, aynı zamanda kod bloklarını kolayca sola ve sağa kaydırabilmeli ve tuşuna bastığınızda imleci otomatik olarak mevcut girinti düzeyine getirmelidir Enter. Kod katlama da faydalı olabilir.


Bağlantı bozulmasına karşı korumak için Guido van Rossum'un tweet'inin içeriği :

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


3
Üçlü tırnaklı dize ('' ') gerçekten çok satırlı yorumları yerine getirmek için çalışır.
Varun Bhatia

Teşekkürler .. Bloğu yorumlamak için ('' ') ve ("" ") kullanılır, ancak Django uygulamaları için bana yardımcı olmadı.Bu yüzden IDLE'yi seçin ve bölge ve Uncomment bölgelerine yorum yapma gibi seçenekler var (kısayol: Alt + 3 ve Alt + 4) sırasıyla Format menüsü altında .
Saurav Kumar

Ayrıca bir IDE kullanmayı da düşünmelisiniz. Evet, çok ağırlar, ancak düzgün kullanılırsa kodlama süresini gerçekten artırabilirler. Şahsen PyDev'i kullandım ve şimdi PTVS'yi (görsel stüdyo ile) kullanıyordum. Çok daha fazlası ile birlikte yukarıdaki özellikleri içeren, gerçekten çok güzel olduğu için PTVS'yi kesinlikle öneriyorum - en azından
sanal sanallarla

2
@HappyLeapSecond Bence "Python gerçek bir çok satırlı yorum sözdizimi yok, ama yorum olarak kullanılabilecek çok satırlı dizeleri destekler."
ADTC

3
Ne istiyorum test ederken tüm kod blokları yorumlamak için kolay bir yoludur. Diğer diller bunu kolaylaştırır. Python sadece bir acı.
Albert Godfrind

45

Kabul edilen cevaptan ...

Üçlü tırnaklı dizeler kullanabilirsiniz. Bir öğretici olmadıklarında (bir sınıf / işlev / modüldeki ilk şey) yok sayılırlar.

Bu doğru değil. Yorumlardan farklı olarak, üç tırnaklı dizeler hala ayrıştırılır ve kaynak kodunda nerede göründüklerine bakılmaksızın sözdizimsel olarak geçerli olmalıdır.

Bu kodu çalıştırmayı denerseniz ...

def parse_token(token):
    """
    This function parses a token.
    TODO: write a decent docstring :-)
    """

    if token == '\\and':
        do_something()

    elif token == '\\or':
        do_something_else()

    elif token == '\\xor':
        '''
        Note that we still need to provide support for the deprecated
        token \xor. Hopefully we can drop support in libfoo 2.0.
        '''
        do_a_different_thing()

    else:
        raise ValueError

Siz de ...

ValueError: invalid \x escape

... Python 2.x veya ...

SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 79-80: truncated \xXX escape

... Python 3.x üzerinde.

Ayrıştırıcı tarafından dikkate alınmayan çok satırlı yorumlar yapmanın tek yolu ...

elif token == '\\xor':
    # Note that we still need to provide support for the deprecated
    # token \xor. Hopefully we can drop support in libfoo 2.0.
    do_a_different_thing()

Sonra r'raw string'- kullanabilirsiniz r'\xor' == '\\xor'.
GingerPlusPlus

1
Evet, herhangi bir "gerçek" çok satırlı yorum ayrıştırılmalı ve sözdizimsel olarak geçerli olmalıdır. C tarzı yorumlar */, bloğu sonlandıracağı için a içeremez .

1
@ dan1111, yorumun son işaretleyiciyi içeremeyeceği açıktır, ancak tek sınırlama budur.
el.pescado

14
'''"yorumlar" daha fazla sınırlamaya sahiptir. Yalnızca tüm ifadeleri yorumlayabilirsiniz, yorumlar ise ifadenin bölümlerini yorumlayabilir. Örnek: In C, bazı liste öğelerini dışarı yorum yapabilirsiniz: int a[] = {1, 2, /* 3, 4, */ 5};. Çok satırlı dize ile listeniz içine bir dize koyacağınız için bunu yapamazsınız.
el.pescado

35

Python 2.7'de çok satırlı yorum:

"""
This is a
multilline comment
"""

Bir sınıfın içindeyseniz, doğru şekilde sekmeniz gerekir.

Örneğin:

class weather2():
   """
   def getStatus_code(self, url):
       world.url = url
       result = requests.get(url)
       return result.status_code
   """

20
Üçlü tırnaklar, hiçbir şey yapmayan metin eklemenin bir yoludur (bunu normal tek tırnaklı dizelerle de yapabileceğinize inanıyorum), ancak yorum değiller - yorumlayıcı aslında satırı yürütüyor (ancak satır çalışmıyor hiçbir şey yapmayın). Bu yüzden üçlü alıntı yapılan bir “yorumun” girintisi önemlidir.
Demis

12
Bu çözüm yanlıştır, weather2yorum aslında bir öğretidir çünkü sınıftaki ilk şeydir.
Ken Williams

@KenWilliams ile aynı fikirde. Bu doğru bir çözüm değil. Bunu bir fonksiyonun / sınıfın ortasına koymayı deneyin ve biçimlendirmenizi ve kod katlama / lintingini otomatikleştirmeyi görün.
alpha_989

25

AFAIK, Python'un blok yorumları yok. Tek tek satırları yorumlamak için #karakteri kullanabilirsiniz .

Notepad ++ kullanıyorsanız , blok yorum yapmak için bir kısayol vardır . Eminim gVim ve Emacs gibi diğerleri benzer özelliklere sahiptir.


2
bu yanlış, üçlü tırnak kullanımıyla ilgili yanıtlara bakın.
Fernando Gonzalez Sanchez

10
@FernandoGonzalezSanchez: Gerçekten yanlış değil. Bu "çok satırlı yorum olarak dize" en iyi şekilde "profesyonel ipucu" olarak tanımlanabilir. Resmi Python belgeleri bu konuda hiçbir şey söylemiyor, dolayısıyla OP tarafından sorulan soru.
Sanjay T. Sharma

8
Bu dokümanlar için bir PEP; bu sayfada "yorum" ile ilgili tek bir söz yoktur.
Sanjay T. Sharma

12

Bence, çok satırlı bir dize işlenmiyor. Ancak, tüm Python IDE'leri olmasa bile çoğunda birden fazla kod satırını 'yorumlamak' için bir kısayol tuşu bulunur.


11

Eğer bir yorum yaparsanız

"""
long comment here
"""

bir betiğin ortasında, Python / linters bunu tanımaz. Yukarıdaki yorum standart önerilerin bir parçası olmadığından katlama dağınık olacaktır. Kullanmak daha iyi

# Long comment
# here.

Vim kullanıyorsanız , uzun yorum satırlarını tuşuna basarak otomatik olarak yorumlamak için commentary.vim gibi eklentiler kullanabilirsiniz Vjgcc. Burada Vjiki kod satırı seçer ve gccyorumlar.

Yukarıdaki gibi eklentileri kullanmak istemiyorsanız, arama ve değiştirme yöntemlerini kullanabilirsiniz.

:.,.+1s/^/# /g

Bu, geçerli ve sonraki satırdaki ilk karakterin yerine geçer #.


8

Çok satırlı yorum diye bir özellik yoktur. #tek bir kod satırını yorumlamanın tek yoludur. Birçoğunuz bunu çözüm olarak `` bir yorum '' diye yanıtladı.

İşe yarıyor gibi görünüyor, ancak dahili '''olarak Python'da, yorumlayıcıyı kullanarak yorumun görmezden gelmediği normal bir dize olarak çevrelenen satırları alıyor #.

Burada resmi belgelere bakın


5

Ne yazık ki dize oluşturma her zaman yorum yapmak için kullanılamaz! Bu nedenle, her satırı a ile bekleyen standarda bağlı kalmak daha güvenlidir #.

İşte bir örnek:

test1 = [1, 2, 3, 4,]       # test1 contains 4 integers

test2 = [1, 2, '''3, 4,'''] # test2 contains 2 integers **and the string** '3, 4,'

4

Bunu deneyebilirsiniz (alıntılanan çalıştırıldığında, ilk sorunun girdisi alıntılanmalıdır '):

"""
print("What's your name? ")
myName = input()
print("It's nice to meet you " + myName)
print("Number of characters is ")
print(len(myName))
age = input("What's your age? ")
print("You will be " + str(int(age)+1) + " next year.")

"""
a = input()
print(a)
print(a*5)

Aradaki """her şey yorumlanacaktır.

Tek satırlık yorumlar arıyorsanız, o zaman öyle #.


3

Python'da çok satırlı yorum:

Benim için hem '' '' ve '' '' çalıştı.

Misal:

a = 10
b = 20
c = a+b
'''
print ('hello')
'''
print ('Addition is: ', a+b)

Misal:

a = 10
b = 20
c = a+b
"""
print('hello')
"""
print('Addition is: ', a+b)

3

Python'daki satır içi yorumlar bir karma karakteriyle başlar.

hello = "Hello!" # This is an inline comment
print(hello)

Merhaba!

Bir dizgi değişmezindeki karma karakterin yalnızca karma karakter olduğunu unutmayın.

dial = "Dial #100 to make an emergency call."
print(dial)

Acil bir arama yapmak için # 100 tuşlayın.

Bir hash karakteri tek veya birden çok satır yorumu için de kullanılabilir.

hello = "Hello"
world = "World"
# First print hello
# And print world
print(hello)
print(world)

Merhaba

Dünya

Öğretiyi desteklemek için metni üçlü çift tırnak işaretleri içine alın.

def say_hello(name):
    """
    This is docstring comment and
    it's support multi line.
    :param name it's your name
    :type name str
    """
    return "Hello " + name + '!'


print(say_hello("John"))

Merhaba John!

Blok yorumları için metni üç tek tırnak içine alın.

'''
I don't care the parameters and
docstrings here.
'''

2

Python 2.7.13'te:

Tek:

"A sample single line comment "

Çok satırlı:

"""
A sample
multiline comment
on PyCharm
"""

2
Tek tırnakların python 2.7'de bir yorum oluşturduğunu mu söylüyorsunuz?
mcalex

3
Tek bir tırnak seti kullanmak bir dize oluşturur. Tek satırlı bir yorumun başına # işareti konmalıdır.
johanno

2

Visual Studio Code evrensel resmi çok satırlı yorum açma / kapatma.

macOS: Kod bloğunu ve ardından +/

Windows: Kod bloğunu seçin ve ardından Ctrl+/


2

Evet, her ikisini de kullanmak iyidir:

'''
Comments
'''

ve

"""
Comments
"""

Ancak, bir IDE'de çalışırken hatırlamanız gereken tek şey, birden çok satır kodu olarak kabul edilmek için tüm dosyayı 'ÇALIŞTIRMAK'. Satır satır 'RUN' düzgün çalışmaz ve bir hata gösterir.


1

Python'da birden fazla kod #satırını yorumlamak için her satırda tek satırlık bir yorum kullanmak yeterlidir :

# This is comment 1
# This is comment 2 
# This is comment 3

Python'da “uygun” çok satırlı yorumlar yazmak için Python'un """dokümantasyon dizeleri (veya docstrings) özelliğine sahip sözdizimi ile çok satırlı dizeler kullanmaktır . Programcılara her Python modülü, işlevi, sınıfı ve yöntemi ile hızlı notlar eklemenin kolay bir yolunu sunar.

'''
This is
multiline
comment
'''

Ayrıca, böyle bir sınıf nesnesiyle öğretiye erişebileceğinizi de belirtin

myobj.__doc__

Bu, önceki cevaplara ne katıyor?
Peter Mortensen

Cevabım, geliştiriciye daha fazla yardımcı olabilecek daha fazla ayrıntı içeriyor.
shafik


1

"""Çok satırlı yorumlar için kullanmaya karşı tavsiye ediyorum !

Beklenmedik bir davranış olarak kabul edilebilecek şeyleri vurgulamak için basit bir örnek:

print('{}\n{}'.format(
    'I am a string',
    """
    Some people consider me a
    multi-line comment, but
    """
    'clearly I am also a string'
    )
)

Şimdi çıktıya bir göz atın:

I am a string

    Some people consider me a
    multi-line comment, but
    clearly I am also a string

Çok satırlı dize yorum olarak değerlendirilmedi, ancak 'clearly I'm also a string'tek bir dize oluşturacak şekilde birleştirildi .

Birden fazla satıra yorum yapmak istiyorsanız, bunu PEP 8 yönergelerine göre yapın :

print('{}\n{}'.format(
    'I am a string',
    # Some people consider me a
    # multi-line comment, but
    'clearly I am also a string'
    )
)

Çıktı:

I am a string
clearly I am also a string

O olmamalı "olmak lang-bash" yerine " bash" dizim? Her durumda, parametrelerle komut satırı komutları olsa bile , genellikle garip görünür (örneğin, "Bazıları için " ). lang-none(sözdizimi vurgulama kapalı) daha iyi bir seçim olabilir.
Peter Mortensen

@PeterMortensen tuhaf vurgulayarak işaret ettiğiniz için teşekkürler bizim! "Lang-none" ile gitti.
jojo

0

PyCharm IDE kullanma.

Ctrl + / tuşlarını kullanarak kod satırları commentve yapabilirsiniz . Ctrl + / geçerli satırı veya seçili birkaç satırı tek satır yorumlu olarak yorumlar veya açıklamayı kaldırır . Django şablonundaki seçili bir kaynak kodu bloğu bloğu etiketlerle çevreler .uncomment({# in Django templates, or # in Python scripts)Pressing Ctrl+Shift+/{% comment %} and {% endcomment %}


n = 5
while n > 0:
    n -= 1
    if n == 2:
        break
    print(n)

print("Loop ended.")

Tüm satırları seçip tuşuna basın Ctrl + /


# n = 5
# while n > 0:
#     n -= 1
#     if n == 2:
#         break
#     print(n)

# print("Loop ended.")

0

Python'da çok satırlı bir yorum yoktur. Aşağıdaki örnek, sözdizimsel hatalar için Python tarafından onaylanan atanmamış bir dizeden oluşur.

Notepad ++ gibi birkaç metin düzenleyici, bize yazılı bir kod veya kelime parçasını yorumlamak için kısayollar sağlar.

def foo():
    "This is a doc string."
    # A single line comment
    """
       This
       is a multiline
       comment/String
    """
    """
    print "This is a sample foo function"
    print "This function has no arguments"
    """
    return True

Ayrıca, Ctrl+ KNot Defteri ++ 'da yorumu engellemek için bir kısayoldur. Seçimin #altındaki her satırın önüne bir a ekler . Ctrl+ Shift+ K, blok rahatsızlığı içindir.


0

Diğer cevapların yanı sıra, Python yorum desteğini kullanan IDE yorum fonksiyonlarını kullanmak için en kolay yol olduğunu düşünüyorum #.

Anaconda Spyder kullanıyorum ve var:

  • Ctrl+ 1- Yorum / uncomment
  • Ctrl+ 4- Bir kod bloğunu yorumlayın
  • Ctrl+ 5- Kod bloğunu kaldır

Tek bir / çok satırlı / kodlu yorum / uncomment olur #.

Bunu en kolay buluyorum.

Örneğin, bir blok yorumu:

# =============================================================================
#     Sample Commented code in spyder
#  Hello, World!
# =============================================================================

Düzenleme için @PeterMortensen teşekkürler :)
aniltilanthe

-2

Yorum yapmak istediğiniz satırları seçin ve ardından Yüce Metin düzenleyicisindeki Python kodunu yorumlamak veya yorumunu kaldırmak için Ctrl+ ?kullanın .

Tek satır için Shift+ kullanabilirsiniz #.

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.