Apakah ada cara untuk membuat komentar multiline dengan Python?

1157

Saya baru-baru ini mulai mempelajari Python , tetapi saya tidak dapat menemukan bagaimana menerapkan komentar multi-line. Sebagian besar bahasa memiliki simbol komentar blok seperti

/*

*/

Saya mencoba ini dengan Python, tetapi ada kesalahan, jadi ini mungkin bukan cara yang benar. Apakah Python sebenarnya memiliki fitur komentar multiline?

Hunter Bawah Tanah
sumber
2
Saya kira sebagai bahasa yang ditafsirkan, masuk akal, seperti dalam kasus sh atau bash atau zsh, itulah #satu-satunya cara untuk membuat komentar. Saya menduga itu membuatnya lebih mudah untuk menafsirkan skrip Python dengan cara ini.
Victor Zamanian
1
Saya tahu jawaban ini sudah tua, tetapi saya menemukan jawabannya karena saya memiliki pertanyaan yang sama. Jawaban yang diterima TIDAK berfungsi, meskipun saya tidak cukup tahu tentang Python untuk mengetahui seluk-beluk mengapa itu mungkin tidak benar (per ADTC).
Brandon Barney
5
@BrandonBarney Biarkan saya menjelaskan masalah Anda. Jawaban yang diterima, yang menggunakan '' ', sebenarnya menciptakan string multi-line yang tidak melakukan apa-apa. Secara teknis, itu bukan komentar. Misalnya, Anda dapat menulis k = '' 'komentar palsu, string nyata' ''. Kemudian, cetak (k) untuk melihat apa arti ADTC.
pinyotae
3
Itu jauh lebih masuk akal sekarang. Saya terbiasa vba tempat membuat string yang tidak digunakan menghasilkan kesalahan. Saya tidak menyadari python mengabaikannya. Ini masih berfungsi untuk debugging dan belajar setidaknya, tetapi bukan praktik yang baik untuk pengembangan aktual.
Brandon Barney
Dalam kode sumber Python, jika Anda memecah garis panjang, editor secara otomatis mengindentasinya, untuk menunjukkan bahwa garis terputus benar-benar bagian dari baris sebelumnya? Itukah yang harus saya lakukan jika saya memecah barisan kode pseudocode?
alpha_989

Jawaban:

1803

Anda dapat menggunakan string yang dikutip tiga kali lipat. Ketika mereka bukan docstring (hal pertama di kelas / fungsi / modul), mereka diabaikan.

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

(Pastikan untuk membuat indentasi yang '''tepat untuk menghindari IndentationError.)

Guido van Rossum (pembuat Python) tweet ini sebagai "pro tip".

Namun, panduan gaya Python, PEP8, lebih suka menggunakan komentar satu baris berturut-turut , dan ini juga yang akan Anda temukan di banyak proyek. Editor teks biasanya memiliki jalan pintas untuk melakukan ini dengan mudah.

Petr Viktorin
sumber
17
Hm Saya menempatkan string multiline besar dalam skrip python test.pyhanya untuk melihat. Ketika saya melakukannya import test, sebuah test.pycfile dihasilkan. Sayangnya, pycfile tersebut sangat besar dan berisi seluruh string sebagai teks biasa. Apakah saya salah memahami sesuatu, atau apakah tweet ini salah?
unutbu
23
@unutbu, jika hanya itu yang ada di file, itu adalah docstring. Letakkan beberapa kode sebelum itu dan itu akan hilang dari pyc. Saya mengedit jawabannya dan memasukkan "modul" ke daftar hal-hal yang memiliki dokumen.
Petr Viktorin
31
Saya tidak suka string multiline sebagai komentar. Penyorotan sintaks menandai mereka sebagai string, bukan sebagai komentar. Saya suka menggunakan editor yang layak yang secara otomatis berurusan dengan mengomentari daerah dan membungkus komentar multiline saat saya mengetik. Tentu saja, ini masalah selera.
Sven Marnach
61
Sebagai sebuah konvensi saya merasa bermanfaat untuk digunakan """untuk dokumen dan '''untuk memblokir komentar. Dengan cara ini Anda dapat membungkus '''dokumen biasa Anda tanpa konflik.
Roshambo
19
Meskipun Anda dapat menggunakan string multi-baris sebagai komentar multi-baris, saya terkejut bahwa tidak ada jawaban yang merujuk pada sub - bagian PEP 8 yang secara khusus merekomendasikan untuk membangun komentar multi-line dari komentar single-line berturut-turut, dengan #baris kosong untuk membedakan paragraf .
Air
82

Python memang memiliki sintaksis string / komentar multiline dalam arti bahwa kecuali digunakan sebagai docstrings, string multiline tidak menghasilkan bytecode - seperti #halnya komentar yang terkait. Akibatnya, ia bertindak persis seperti komentar.

Di sisi lain, jika Anda mengatakan perilaku ini harus didokumentasikan dalam dokumentasi resmi untuk menjadi sintaks komentar yang benar, maka ya, Anda berhak mengatakan itu tidak dijamin sebagai bagian dari spesifikasi bahasa.

Dalam hal apa pun, editor teks Anda juga harus dapat dengan mudah mengomentari wilayah yang dipilih (dengan menempatkan a #di depan setiap baris secara individual). Jika tidak, beralihlah ke editor teks yang melakukannya.

Pemrograman dengan Python tanpa fitur pengeditan teks tertentu bisa menjadi pengalaman yang menyakitkan. Menemukan editor yang tepat (dan mengetahui cara menggunakannya) dapat membuat perbedaan besar dalam bagaimana pengalaman pemrograman Python dirasakan.

Editor teks tidak hanya dapat mengomentari daerah yang dipilih, tetapi juga harus dapat memindahkan blok kode ke kiri dan kanan dengan mudah, dan itu juga harus secara otomatis menempatkan kursor pada tingkat lekukan saat ini ketika Anda menekan Enter. Lipat kode juga bisa bermanfaat.


Untuk melindungi dari kerusakan tautan, berikut adalah isi tweet Guido van Rossum :

@BSUCSClub Tip Python: Anda dapat menggunakan string multi-line sebagai komentar multi-line. Kecuali digunakan sebagai dokumen, mereka tidak menghasilkan kode! :-)

unutbu
sumber
3
string tiga kutip ('' ') memang berfungsi untuk memenuhi komentar multi-baris.
Varun Bhatia
Terima kasih .. Digunakan ('' ') dan ("" ") untuk mengomentari blok tetapi tidak membantu saya untuk aplikasi Django. Jadi pilih IDLE dan ada opsi seperti daerah Komentar di luar dan daerah Tidak komentar (pintasan: Alt + 3 dan Alt + 4 masing-masing) di bawah menu Format . Sekarang lebih mudah dari sebelumnya ..
Saurav Kumar
Anda juga harus mempertimbangkan untuk menggunakan IDE. Ya, mereka lumayan, tetapi jika digunakan dengan benar mereka benar-benar dapat meningkatkan waktu pengkodean. Saya pribadi dulu menggunakan PyDev, dan sekarang menggunakan PTVS (dengan visual studio). Saya pasti akan merekomendasikan PTVS, karena ini sangat bagus untuk dikerjakan, mengandung banyak fitur di atas dan lebih banyak lagi - integrasi langsung dengan virtualenvs, dan debugging yang sangat bagus, untuk sedikitnya
Sbspider
2
@HappyLeapSecond Saya pikir Anda harus mengklarifikasi dengan mengatakan "Python tidak memiliki sintaks komentar multiline yang benar , tetapi mendukung string multiline yang dapat digunakan sebagai komentar."
ADTC
3
Yang saya inginkan adalah cara mudah untuk mengomentari seluruh blok kode saat pengujian. Bahasa lain membuatnya mudah. Python hanya menyusahkan.
Albert Godfrind
45

Dari jawaban yang diterima ...

Anda dapat menggunakan string yang dikutip tiga kali lipat. Ketika mereka bukan docstring (hal pertama di kelas / fungsi / modul), mereka diabaikan.

Ini tidak benar. Tidak seperti komentar, string triple-dikutip masih diuraikan dan harus valid secara sintaksis, terlepas dari mana mereka muncul dalam kode sumber.

Jika Anda mencoba menjalankan kode ini ...

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

Anda akan mendapatkan ...

ValueError: invalid \x escape

... di Python 2.x atau ...

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

... di Python 3.x.

Satu-satunya cara untuk melakukan komentar multi-baris yang diabaikan oleh parser adalah ...

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()
Aya
sumber
Kemudian, Anda dapat menggunakan r'raw string'- r'\xor' == '\\xor'.
GingerPlusPlus
1
Ya, setiap komentar multi-baris "benar" juga harus diuraikan dan valid secara sintaksis. Komentar gaya-C tidak boleh mengandung a */karena akan menghentikan blok, misalnya.
1
@ dan1111 jelas bahwa komentar tidak dapat menyertakan penanda akhir, tetapi itulah satu-satunya batasan.
el.pescado
14
'''"komentar" memiliki lebih banyak batasan. Anda hanya dapat mengomentari seluruh pernyataan, sedangkan komentar dapat mengomentari bagian ekspresi. Contoh: Dalam C, Anda dapat komentar beberapa elemen daftar: int a[] = {1, 2, /* 3, 4, */ 5};. Dengan multi-line string, Anda tidak dapat melakukannya, karena itu akan menempatkan string di dalam daftar Anda.
el.pescado
35

Dalam Python 2.7, komentar multiline adalah:

"""
This is a
multilline comment
"""

Jika Anda berada di dalam kelas, Anda harus tab itu dengan benar.

Sebagai contoh:

class weather2():
   """
   def getStatus_code(self, url):
       world.url = url
       result = requests.get(url)
       return result.status_code
   """
SeseorangAnonim
sumber
20
triple-quotes adalah cara untuk menyisipkan teks yang tidak melakukan apa-apa (saya percaya Anda juga bisa melakukan ini dengan string yang dikutip tunggal), tetapi itu bukan komentar - penerjemah benar-benar mengeksekusi baris (tetapi baris tidak dapat melakukan apapun). Itu sebabnya lekukan 'komentar' tiga kutip penting.
Demis
12
Solusi ini salah, weather2komentarnya sebenarnya adalah docstring karena ini adalah hal pertama di kelas.
Ken Williams
Setuju dengan @KenWilliams. Ini bukan solusi yang benar. Coba letakkan ini di tengah-tengah fungsi / kelas, dan lihat bagaimana ini mengacaukan pemformatan Anda dan mengotomatiskan pelipat kode / linting.
alpha_989
25

AFAIK, Python tidak memiliki blokir komentar. Untuk mengomentari setiap baris, Anda dapat menggunakan #karakter.

Jika Anda menggunakan Notepad ++ , ada jalan pintas untuk memblokir komentar . Saya yakin orang lain seperti gVim dan Emacs memiliki fitur serupa.

Sanjay T. Sharma
sumber
2
ini tidak benar, lihat tanggapan tentang menggunakan tanda kutip tiga.
Fernando Gonzalez Sanchez
10
@FernandoGonzalezSanchez: Ini benar-benar tidak salah. "String multi-baris sebagai komentar" ini dapat digambarkan sebagai "pro-tip". Dokumentasi Python resmi tidak mengatakan apa-apa tentang hal ini, maka pertanyaan yang diposting oleh OP.
Sanjay T. Sharma
8
Itu PEP untuk dokumen; tidak ada satu pun penyebutan "komentar" pada halaman itu.
Sanjay T. Sharma
12

Saya pikir tidak, kecuali bahwa string multiline tidak diproses. Namun, sebagian besar, jika tidak semua IDE Python memiliki shortkey untuk 'mengomentari' beberapa baris kode.

Anti Bumi
sumber
11

Jika Anda memberi komentar

"""
long comment here
"""

di tengah skrip, Python / linter tidak akan mengenalinya. Lipat akan kacau, karena komentar di atas bukan bagian dari rekomendasi standar. Lebih baik digunakan

# Long comment
# here.

Jika Anda menggunakan Vim , Anda bisa plugin seperti commentary.vim , untuk secara otomatis mengomentari garis panjang komentar dengan menekan Vjgcc. Di mana Vjmemilih dua baris kode, dan gccberkomentar keluar.

Jika Anda tidak ingin menggunakan plugin seperti di atas, Anda dapat menggunakan pencarian dan ganti like

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

Ini akan menggantikan karakter pertama pada baris saat ini dan selanjutnya dengan #.

alpha_989
sumber
8

Tidak ada fitur seperti komentar multi-baris. #adalah satu-satunya cara untuk mengomentari satu baris kode. Banyak dari Anda menjawab '' 'komentar' '' ini sebagai solusi mereka.

Tampaknya berfungsi, tetapi secara internal '''dengan Python mengambil garis-garis yang terlampir sebagai string biasa yang tidak diabaikan oleh interpreter seperti komentar menggunakan #.

Periksa dokumentasi resmi di sini

RATAN KUMAR
sumber
5

Sayangnya pengetatan tidak selalu dapat digunakan sebagai komentar! Jadi lebih aman untuk tetap berpegang pada standar setiap baris dengan #.

Berikut ini sebuah contoh:

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

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

Nah, Anda dapat mencoba ini (saat menjalankan kutipan, input ke pertanyaan pertama harus dikutip dengan '):

"""
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)

Apapun yang terlampir di antara """akan dikomentari.

Jika Anda mencari komentar satu baris maka itu #.

K_holla
sumber
3

Komentar multiline dengan Python:

Bagi saya, keduanya '' 'dan "" "berfungsi.

Contoh:

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

Contoh:

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

Komentar inline dalam Python dimulai dengan karakter hash.

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

Halo!

Perhatikan bahwa karakter hash dalam string literal hanyalah karakter hash.

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

Tekan # 100 untuk melakukan panggilan darurat.

Karakter hash juga dapat digunakan untuk komentar baris tunggal atau ganda.

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

Halo

Dunia

Lampirkan teks dengan tanda kutip ganda rangkap untuk mendukung docstring.

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"))

Halo John!

Lampirkan teks dengan tanda kutip tunggal tunggal untuk komentar blok.

'''
I don't care the parameters and
docstrings here.
'''
Madan Sapkota
sumber
2

Pada Python 2.7.13:

Tunggal:

"A sample single line comment "

Multiline:

"""
A sample
multiline comment
on PyCharm
"""
AG
sumber
2
Anda mengatakan tanda kutip tunggal buat komentar di python 2.7?
mcalex
3
Menggunakan satu set kutipan menciptakan string. Satu komentar baris harus diawali dengan #.
johanno
2

Kode Visual Studio universal universal multi-line comment toggle.

macOS: Pilih blok-kode lalu +/

Windows: Pilih blok-kode lalu Ctrl+/

Edison
sumber
2

Ya, boleh saja menggunakan keduanya:

'''
Comments
'''

dan

"""
Comments
"""

Tapi, satu-satunya hal yang Anda semua perlu ingat ketika menjalankan dalam IDE, adalah Anda harus 'MENJALANKAN seluruh file agar dapat diterima sebagai beberapa kode baris. Baris demi baris 'RUN' tidak akan berfungsi dengan baik dan akan menampilkan kesalahan.

Rajkamal Mishra
sumber
1

Untuk mengomentari banyak baris kode dalam Python adalah cukup menggunakan #komentar satu baris pada setiap baris:

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

Untuk menulis komentar multi-baris "layak" dalam Python adalah dengan menggunakan string multi-line dengan """sintaksis Python memiliki fitur string dokumentasi (atau dokumen). Ini memberi programmer cara mudah menambahkan catatan cepat dengan setiap modul, fungsi, kelas, dan metode Python.

'''
This is
multiline
comment
'''

Juga, sebutkan bahwa Anda dapat mengakses docstring oleh objek kelas seperti ini

myobj.__doc__
shafik
sumber
Apa yang ditambahkan dari jawaban sebelumnya?
Peter Mortensen
Jawaban saya mengandung lebih banyak detail, yang dapat membantu pengembang lebih banyak.
shafik
1

Anda dapat menggunakan yang berikut ini. Ini disebut DockString.

def my_function(arg1):
    """
    Summary line.
    Extended description of function.
    Parameters:
    arg1 (int): Description of arg1
    Returns:
    int: Description of return value
    """
    return arg1

print my_function.__doc__
merin
sumber
"DockString" ? Apakah Anda punya referensi?
Peter Mortensen
@PeterMortensen sini Anda pergi datacamp.com/community/tutorials/docstrings-python
merin
1

Saya akan menyarankan untuk tidak menggunakan """komentar multi-baris!

Berikut adalah contoh sederhana untuk menyoroti apa yang mungkin dianggap sebagai perilaku tak terduga:

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

Sekarang lihat hasilnya:

I am a string

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

String multi baris tidak diperlakukan sebagai komentar, tetapi digabungkan dengan 'clearly I'm also a string'untuk membentuk string tunggal.

Jika Anda ingin berkomentar banyak baris, lakukan sesuai dengan pedoman PEP 8 :

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

Keluaran:

I am a string
clearly I am also a string
jojo
sumber
Bukankah seharusnya " lang-bash" bukan " bash" untuk penyorotan sintaksis? Bagaimanapun, biasanya terlihat aneh (misalnya untuk "Some" di sini) - bahkan jika itu sebenarnya perintah-perintah dengan parameter. lang-none(penyorotan sintaks dimatikan) mungkin merupakan pilihan yang lebih baik.
Peter Mortensen
@PeterMortensen, terima kasih telah menunjukkan penyorotan aneh kami! Pergi dengan "lang-none".
jojo
0

Menggunakan PyCharm IDE.

Anda dapat commentdan uncommentbaris kode menggunakan Ctrl + /. Ctrl + / komentar atau batalkan komentar pada baris saat ini atau beberapa baris yang dipilih dengan komentar baris tunggal ({# in Django templates, or # in Python scripts). Pressing Ctrl+Shift+/untuk blok kode sumber yang dipilih dalam template Django mengelilingi blok dengan {% comment %} and {% endcomment %}tag.


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

print("Loop ended.")

Pilih semua baris lalu tekan Ctrl + /


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

# print("Loop ended.")
0m3r
sumber
0

Komentar multiline sebenarnya tidak ada di Python. Contoh di bawah ini terdiri dari string yang tidak ditetapkan, yang divalidasi oleh Python untuk kesalahan sintaksis.

Beberapa editor teks, seperti Notepad ++ , memberikan kami pintasan untuk mengomentari kode atau kata-kata tertulis.

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

Juga, Ctrl+ Kadalah jalan pintas di Notepad ++ untuk memblokir komentar. Itu menambahkan #di depan setiap baris di bawah pilihan. Ctrl+ Shift+ Kuntuk blok komentar.

Anda tahu siapa
sumber
0

Di antara jawaban lain, saya menemukan cara termudah adalah dengan menggunakan fungsi komentar IDE yang menggunakan dukungan komentar Python # .

Saya menggunakan Anaconda Spyder dan memiliki:

  • Ctrl + 1 - Komentar / tanda komentar
  • Ctrl + 4 - Komentari satu blok kode
  • Ctrl+ 5- Batalkan komentar pada blok kode

Ini akan mengomentari / menghapus komentar satu baris / multi kode dengan # .

Saya merasa paling mudah.

Misalnya, blok komentar:

# =============================================================================
#     Sample Commented code in spyder
#  Hello, World!
# =============================================================================
Lagi pula
sumber
Terima kasih @PeterMortensen untuk hasil editnya :)
aniltilanthe
-2

Pilih baris yang ingin Anda komentari dan kemudian gunakan Ctrl+ ?untuk berkomentar atau batalkan komentar pada kode Python di editor Teks Sublime .

Untuk satu baris Anda dapat menggunakan Shift+ #.

Tarjeet Singh
sumber