Có cách nào để tạo bình luận đa dòng trong Python không?


1157

Gần đây tôi đã bắt đầu nghiên cứu Python , nhưng tôi không thể tìm thấy cách triển khai các bình luận nhiều dòng. Hầu hết các ngôn ngữ có biểu tượng bình luận khối như

/*

*/

Tôi đã thử điều này trong Python, nhưng nó đưa ra một lỗi, vì vậy đây có lẽ không phải là cách chính xác. Python thực sự có một tính năng bình luận nhiều dòng?


2
Tôi cho rằng là một ngôn ngữ được giải thích, nó có ý nghĩa, như trong trường hợp sh hoặc bash hoặc zsh, đó #là cách duy nhất để đưa ra nhận xét. Tôi đoán rằng nó giúp việc diễn giải các kịch bản Python theo cách này dễ dàng hơn.
Victor Zamanian

1
Tôi biết câu trả lời này đã cũ, nhưng tôi đã xem qua vì tôi có cùng một câu hỏi. Câu trả lời được chấp nhận DOES hoạt động, mặc dù tôi không biết đủ về Python để biết những điều phức tạp tại sao nó có thể không đúng (theo ADTC).
Brandon Barney

5
@BrandonBarney Hãy để tôi giải thích cho bạn vấn đề. Câu trả lời được chấp nhận, sử dụng '' ', thực sự tạo ra một chuỗi nhiều dòng không có gì. Về mặt kỹ thuật, đó không phải là một bình luận. Ví dụ: bạn có thể viết k = '' 'nhận xét giả, chuỗi thực' ''. Sau đó, in (k) để xem ADTC có nghĩa là gì.
pinyotae

3
Điều đó làm cho rất nhiều ý nghĩa bây giờ. Tôi đã quen với vba khi tạo chuỗi không sử dụng dẫn đến lỗi. Tôi đã không nhận ra trăn chỉ bỏ qua nó. Nó vẫn hoạt động để gỡ lỗi và học ít nhất, nhưng không phải là cách thực hành tốt để phát triển thực tế.
Brandon Barney

Trong mã nguồn Python, nếu bạn ngắt một dòng dài, trình soạn thảo sẽ tự động thụt lề, để chỉ ra rằng dòng bị hỏng có thực sự là một phần của dòng trước không? Đó có phải là những gì tôi nên làm nếu tôi phá vỡ một dòng mã giả dài?
alpha_989

Câu trả lời:


1802

Bạn có thể sử dụng chuỗi ba trích dẫn. Khi chúng không phải là một chuỗi doc (điều đầu tiên trong một lớp / hàm / mô-đun), chúng sẽ bị bỏ qua.

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

(Hãy chắc chắn thụt đầu hàng '''một cách thích hợp để tránh một IndentationError.)

Guido van Rossum (người tạo ra Python) đã tweet đây là một "mẹo chuyên nghiệp".

Tuy nhiên, hướng dẫn về phong cách của Python, PEP8, ưu tiên sử dụng các nhận xét một dòng liên tiếp và đây cũng là những gì bạn sẽ tìm thấy trong nhiều dự án. Trình soạn thảo văn bản thường có một phím tắt để làm điều này một cách dễ dàng.


17
Hừm. Tôi đặt một chuỗi multiline lớn trong một kịch bản python test.pychỉ để xem. Khi tôi làm import test, một test.pyctập tin được tạo ra. Thật không may, pyctệp rất lớn và chứa toàn bộ chuỗi dưới dạng văn bản thuần túy. Tôi đang hiểu nhầm điều gì đó, hay tweet này không chính xác?
unutbu

23
@unutbu, nếu đó là thứ duy nhất trong tập tin thì đó là một chuỗi. Đặt một số mã trước khi nó và nó sẽ biến mất khỏi pyc. Tôi chỉnh sửa câu trả lời và đưa „mô-đun vào danh sách những thứ có tài liệu.
Petr Viktorin

31
Tôi không thích chuỗi multiline như bình luận. Cú pháp tô sáng đánh dấu chúng dưới dạng chuỗi, không phải là nhận xét. Tôi thích sử dụng một trình soạn thảo đàng hoàng, tự động xử lý các bình luận ra các vùng và gói các bình luận đa dòng trong khi tôi gõ. Tất nhiên, đó là vấn đề của hương vị.
Sven Marnach

61
Như một quy ước, tôi thấy nó hữu ích khi sử dụng """cho các tài liệu và '''cho các bình luận khối. Theo cách này, bạn có thể quấn '''quanh các tài liệu thông thường của bạn mà không có xung đột.
Roshambo

19
Mặc dù bạn có thể sử dụng chuỗi nhiều dòng làm nhận xét nhiều dòng, tôi ngạc nhiên rằng không có câu trả lời nào trong số này trả lời cho tiểu mục PEP 8 khuyến nghị xây dựng các nhận xét nhiều dòng từ các nhận xét một dòng liên tiếp, với các #dòng trống để phân biệt các đoạn .
Không khí

82

Python có một cú pháp chuỗi / bình luận đa dòng theo nghĩa là trừ khi được sử dụng làm tài liệu, các chuỗi đa dòng không tạo ra mã byte - giống như các #bình luận được chuẩn bị. Trong thực tế, nó hoạt động chính xác như một bình luận.

Mặt khác, nếu bạn nói hành vi này phải được ghi lại trong tài liệu chính thức để trở thành một cú pháp nhận xét đúng, thì có, bạn sẽ đúng khi nói nó không được đảm bảo là một phần của đặc tả ngôn ngữ.

Trong mọi trường hợp, trình soạn thảo văn bản của bạn cũng có thể dễ dàng nhận xét một khu vực được chọn (bằng cách đặt riêng #trước mỗi dòng). Nếu không, chuyển sang một trình soạn thảo văn bản nào.

Lập trình trong Python mà không có các tính năng chỉnh sửa văn bản nhất định có thể là một kinh nghiệm đau đớn. Tìm trình soạn thảo phù hợp (và biết cách sử dụng nó) có thể tạo ra sự khác biệt lớn trong cách cảm nhận trải nghiệm lập trình Python.

Trình soạn thảo văn bản không chỉ có thể nhận xét các vùng đã chọn, nó cũng có thể dễ dàng dịch chuyển các khối mã sang trái và phải và nó sẽ tự động đặt con trỏ ở mức thụt dòng hiện tại khi bạn nhấn Enter. Mã gấp cũng có thể hữu ích.


Để bảo vệ chống lại sự phân rã liên kết, đây là nội dung tweet của Guido van Rossum :

@BSUCSClub Mẹo của Python: Bạn có thể sử dụng chuỗi nhiều dòng làm nhận xét nhiều dòng. Trừ khi được sử dụng làm tài liệu, chúng không tạo ra mã! :-)


3
chuỗi ba trích dẫn ('' ') thực sự hoạt động để thực hiện các nhận xét nhiều dòng.
Varun Bhatia

Cảm ơn .. Được sử dụng ('' ') và ("" ") để nhận xét khối nhưng nó không giúp tôi cho các ứng dụng Django. Vì vậy, đã chọn IDLE và có các tùy chọn như Nhận xét khu vựcVùng không ghi chú (phím tắt: Alt + 3 và Alt + 4 tương ứng) trong menu Định dạng . Bây giờ việc này trở nên dễ dàng hơn bao giờ hết ..
Saurav Kumar

Bạn cũng nên xem xét sử dụng IDE. Vâng, chúng rất nặng, nhưng nếu được sử dụng đúng cách, chúng thực sự có thể tăng thời gian mã hóa. Cá nhân tôi đã từng sử dụng PyDev, và bây giờ sử dụng PTVS (với studio trực quan). Tôi chắc chắn sẽ giới thiệu PTVS, vì nó thực sự tốt khi làm việc với nó, chứa các tính năng trên cùng với nhiều hơn nữa - tích hợp trực tiếp với virtualenvs và gỡ lỗi thực sự, để nói rằng ít nhất
Sbspider

2
@HappyLeapSecond Tôi nghĩ bạn nên làm rõ nó nói rằng "Python không có cú pháp nhận xét đa dòng thực sự , nhưng hỗ trợ các chuỗi đa dòng có thể được sử dụng làm nhận xét."
ADTC

3
Những gì tôi muốn là một cách dễ dàng để nhận xét toàn bộ khối mã khi thử nghiệm. Các ngôn ngữ khác làm cho điều đó dễ dàng. Python chỉ là một nỗi đau.
Albert Godfrind

45

Từ câu trả lời được chấp nhận ...

Bạn có thể sử dụng chuỗi ba trích dẫn. Khi chúng không phải là một chuỗi doc (điều đầu tiên trong một lớp / hàm / mô-đun), chúng sẽ bị bỏ qua.

Đơn giản là nó sai. Không giống như các bình luận, các chuỗi ba trích dẫn vẫn được phân tích cú pháp và phải có giá trị cú pháp, bất kể chúng xuất hiện ở đâu trong mã nguồn.

Nếu bạn cố chạy mã này ...

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

Bạn sẽ nhận được ...

ValueError: invalid \x escape

... trên Python 2.x hoặc ...

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

... trên Python 3.x.

Cách duy nhất để thực hiện nhận xét nhiều dòng mà trình phân tích cú pháp bỏ qua là ...

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

Sau đó, bạn có thể sử dụng r'raw string'- r'\xor' == '\\xor'.
GingerPlusPlus

1
Vâng, bất kỳ nhận xét nhiều dòng "đúng" cũng phải được phân tích cú pháp và cú pháp hợp lệ. */Ví dụ, các bình luận kiểu C không thể chứa một vì nó sẽ chấm dứt khối.

1
@ dan1111 rõ ràng là nhận xét không thể bao gồm điểm đánh dấu kết thúc, nhưng đó là hạn chế duy nhất.
el.pescado

14
'''"Ý kiến" có nhiều hạn chế hơn. Bạn chỉ có thể nhận xét toàn bộ báo cáo, trong khi ý kiến ​​có thể nhận xét các phần của biểu thức. Ví dụ: Trong C, bạn có thể nhận xét một số thành phần danh sách : int a[] = {1, 2, /* 3, 4, */ 5};. Với chuỗi nhiều dòng, bạn không thể làm điều đó, vì điều đó sẽ đặt một chuỗi trong danh sách của bạn.
el.pescado

35

Trong Python 2.7, nhận xét đa dòng là:

"""
This is a
multilline comment
"""

Trong trường hợp bạn ở trong một lớp, bạn nên tab nó đúng cách.

Ví dụ:

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

20
trích dẫn ba lần là một cách để chèn văn bản mà không làm gì cả 't làm bất cứ điều gì). Đó là lý do tại sao việc thụt lề của một 'bình luận' ba trích dẫn là quan trọng.
Demis

12
Giải pháp này không chính xác, weather2nhận xét thực sự là một chuỗi vì nó là điều đầu tiên trong lớp.
Ken Williams

Đồng ý với @KenWilliams. Đây không phải là một giải pháp chính xác. Hãy thử đặt cái này ở giữa một hàm / lớp và xem cách nó làm rối định dạng của bạn và tự động gấp / xé mã.
alpha_989

25

AFAIK, Python không có bình luận khối. Để bình luận các dòng riêng lẻ, bạn có thể sử dụng các #ký tự.

Nếu bạn đang sử dụng Notepad ++ , có một lối tắt để bình luận khối . Tôi chắc rằng những người khác như gVimEmacs có các tính năng tương tự.


2
Điều này là không chính xác, xem các phản hồi về việc sử dụng ba dấu ngoặc kép.
Fernando Gonzalez Sanchez

10
@FernandoGonzalezSanchez: Nó thực sự không sai. "Chuỗi nhiều dòng như nhận xét" này có thể được mô tả tốt nhất dưới dạng "pro-tip". Các tài liệu Python chính thức không nói gì về điều này, do đó câu hỏi được đăng bởi OP.
Sanjay T. Sharma

8
Đó là một PEP cho các tài liệu; không có một đề cập nào về "bình luận" trên trang đó.
Sanjay T. Sharma

12

Tôi nghĩ là không, ngoại trừ một chuỗi nhiều dòng không được xử lý. Tuy nhiên, hầu hết, nếu không phải tất cả các IDE Python đều có một phím tắt để 'bình luận' nhiều dòng mã.


11

Nếu bạn đặt một bình luận trong

"""
long comment here
"""

ở giữa tập lệnh, Python / linters sẽ không nhận ra điều đó. Folding sẽ bị rối tung, vì nhận xét trên không phải là một phần của các khuyến nghị tiêu chuẩn. Sử dụng tốt hơn

# Long comment
# here.

Nếu bạn sử dụng Vim , bạn có thể bổ trợ như bình luận.vim , để tự động nhận xét các dòng bình luận dài bằng cách nhấn Vjgcc. Nơi Vjchọn hai dòng mã và gccnhận xét chúng.

Nếu bạn không muốn sử dụng các plugin như trên, bạn có thể sử dụng tìm kiếm và thay thế như

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

Điều này sẽ thay thế ký tự đầu tiên trên dòng hiện tại và tiếp theo #.


8

Không có tính năng như một bình luận nhiều dòng. #là cách duy nhất để bình luận một dòng mã. Nhiều bạn trả lời '' 'một bình luận' '' đây là giải pháp của họ.

Nó dường như hoạt động, nhưng bên '''trong Python có các dòng được bao quanh như một chuỗi thông thường mà trình thông dịch không bỏ qua như nhận xét sử dụng #.

Kiểm tra tài liệu chính thức tại đây


5

Thật không may, chuỗi không thể luôn luôn được sử dụng như bình luận! Vì vậy, an toàn hơn là bám vào tiêu chuẩn chuẩn bị mỗi dòng với a #.

Đây là một ví dụ:

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

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

4

Chà, bạn có thể thử điều này (khi chạy trích dẫn, đầu vào cho câu hỏi đầu tiên sẽ được trích dẫn '):

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

Bất cứ điều gì kèm theo giữa """sẽ được bình luận.

Nếu bạn đang tìm kiếm bình luận một dòng thì nó #.


3

Nhận xét nhiều dòng trong Python:

Đối với tôi, cả '' 'và "" "đều hoạt động.

Thí dụ:

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

Thí dụ:

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

3

Các bình luận nội tuyến trong Python bắt đầu bằng một ký tự băm.

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

Xin chào!

Lưu ý rằng một ký tự băm trong một chuỗi ký tự chỉ là một ký tự băm.

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

Quay số # 100 để thực hiện cuộc gọi khẩn cấp.

Một ký tự băm cũng có thể được sử dụng cho các nhận xét đơn hoặc nhiều dòng.

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

xin chào

Thế giới

Đính kèm văn bản với ba dấu ngoặc kép để hỗ trợ chuỗi.

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

Chào John!

Kèm theo văn bản với ba trích dẫn đơn cho ý kiến ​​khối.

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

2

Trên Python 2.7.13:

Độc thân:

"A sample single line comment "

Đa dòng:

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

2
Bạn đang nói trích dẫn đơn tạo ra một nhận xét trong python 2.7?
mcalex

3
Sử dụng một bộ dấu ngoặc kép sẽ tạo ra một chuỗi. Một nhận xét dòng đơn nên được bắt đầu bằng dấu #.
johanno

2

Visual Studio Code phổ biến chính thức chuyển đổi nhận xét nhiều dòng.

macOS: Chọn khối mã và sau đó +/

Windows: Chọn khối mã và sau đó Ctrl+/


2

Có, sử dụng cả hai là tốt:

'''
Comments
'''

"""
Comments
"""

Nhưng, điều duy nhất mà tất cả các bạn cần nhớ khi chạy trong IDE, là bạn phải 'CHẠY' toàn bộ tệp để được chấp nhận dưới dạng nhiều mã dòng. Từng dòng 'RUN' sẽ không hoạt động đúng và sẽ hiển thị lỗi.


1

Để nhận xét nhiều dòng mã trong Python là chỉ cần sử dụng một #nhận xét một dòng trên mỗi dòng:

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

Để viết các nhận xét đa dòng thích hợp của Wikipedia trong Python là sử dụng các chuỗi nhiều dòng với """cú pháp Python có tính năng chuỗi tài liệu (hoặc docstrings). Nó cung cấp cho các lập trình viên một cách dễ dàng để thêm ghi chú nhanh với mọi mô-đun, hàm, lớp và phương thức Python.

'''
This is
multiline
comment
'''

Ngoài ra, đề cập rằng bạn có thể truy cập chuỗi bằng một đối tượng lớp như thế này

myobj.__doc__

Điều này thêm gì vào các câu trả lời trước?
Peter Mortensen

Câu trả lời của tôi chứa nhiều chi tiết hơn, có thể giúp nhà phát triển nhiều hơn.
shafik

1

Bạn có thể sử dụng như sau. Điều này được gọi là 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__

"DockString" ? Bạn đã có một tài liệu tham khảo?
Peter Mortensen

@PeterMortensen tại đây bạn truy cập datacamp.com/community/tutorials/docstrings-python
merin

1

Tôi sẽ khuyên không sử dụng """cho ý kiến ​​nhiều dòng!

Dưới đây là một ví dụ đơn giản để làm nổi bật những gì có thể được coi là hành vi không mong muốn:

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

Bây giờ hãy xem đầu ra:

I am a string

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

Chuỗi nhiều dòng không được coi là nhận xét, nhưng nó được nối với nhau 'clearly I'm also a string'để tạo thành một chuỗi.

Nếu bạn muốn bình luận nhiều dòng làm như vậy theo hướng dẫn PEP 8 :

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

Đầu ra:

I am a string
clearly I am also a string

Không phải là " lang-bash" thay vì " bash" cho tô sáng cú pháp? Trong mọi trường hợp, nó thường trông lạ (ví dụ: "Một số" ở đây) - ngay cả khi nó thực sự là các lệnh dòng lệnh với các tham số. lang-none(tô sáng cú pháp tắt) có thể là một lựa chọn tốt hơn.
Peter Mortensen

@PeterMortensen cảm ơn bạn đã chỉ ra điểm nổi bật kỳ lạ của chúng tôi! Đã đi với "lang-none".
jojo

0

Sử dụng IDE PyCharm.

Bạn có thể commentuncommentcác dòng mã bằng Ctrl + /. Ctrl + / nhận xét hoặc bỏ ghi chú dòng hiện tại hoặc một số dòng được chọn với nhận xét dòng đơn ({# in Django templates, or # in Python scripts). Pressing Ctrl+Shift+/đối với một khối mã nguồn được chọn trong mẫu Django bao quanh khối đó bằng {% comment %} and {% endcomment %}các thẻ.


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

print("Loop ended.")

Chọn tất cả các dòng rồi nhấn Ctrl + /


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

# print("Loop ended.")

0

Một nhận xét đa dòng không thực sự tồn tại trong Python. Ví dụ dưới đây bao gồm một chuỗi chưa được gán, được xác thực bởi Python cho các lỗi cú pháp.

Một vài trình soạn thảo văn bản, như Notepad ++ , cung cấp cho chúng tôi các phím tắt để nhận xét một đoạn mã hoặc từ được viết.

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

Ngoài ra, Ctrl+ Klà một phím tắt trong Notepad ++ để chặn bình luận. Nó thêm một #ở phía trước của mỗi dòng dưới sự lựa chọn. Ctrl+ Shift+ Klà dành cho khối uncomment.


0

Trong số các câu trả lời khác, tôi thấy cách dễ nhất là sử dụng các hàm nhận xét IDE sử dụng hỗ trợ bình luận Python #.

Tôi đang sử dụng Anaconda Spyder và nó có:

  • Ctrl+ 1- Nhận xét / không chú ý
  • Ctrl+ 4- Nhận xét một khối mã
  • Ctrl+ 5- Bỏ ghi chú một khối mã

Nó sẽ bình luận / bỏ ghi chú một dòng / nhiều dòng mã #.

Tôi thấy nó dễ nhất

Ví dụ: một nhận xét khối:

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

Cảm ơn @PeterMortensen đã chỉnh sửa :)
aniltilanthe

-2

Chọn các dòng mà bạn muốn bình luận và sau đó sử dụng Ctrl+ ?để bình luận hoặc bỏ ghi chú mã Python trong trình soạn thảo Sublime Text .

Đối với dòng đơn bạn có thể sử dụng Shift+ #.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.