Jaki jest właściwy sposób komentowania funkcji w Pythonie?


174

Czy istnieje ogólnie przyjęty sposób komentowania funkcji w Pythonie? Czy poniższe są dopuszczalne?

#########################################################
# Create a new user
#########################################################
def add(self):

Odpowiedzi:


318

Prawidłowym sposobem na to jest dostarczenie dokumentów. W ten sposób help(add)wypluje również Twój komentarz.

def add(self):
    """Create a new user.
    Line 2 of comment...
    And so on... 
    """

To trzy podwójne cudzysłowy, aby otworzyć komentarz i kolejne trzy podwójne cudzysłowy, aby go zakończyć. Możesz także użyć dowolnego prawidłowego ciągu znaków Pythona. Nie musi być wielowierszowy, a podwójne cudzysłowy można zastąpić pojedynczymi cudzysłowami.

Patrz: PEP 257


10
Zwróć uwagę, że nie musi być ujęte w potrójne cudzysłowy; każdy literał ciągu będzie działał. Ale możesz umieścić więcej informacji w łańcuchu wielowierszowym.
Ignacio Vazquez-Abrams

5
Chociaż konwencja nakazuje, że powinien być cytowany potrójnie. Nigdy nie widziałem żadnego dokumentu, którego nie było.
Chinmay Kanchi,

2
Co nie znaczy, że się nie zgadzam. Powinny być zacytowane potrójnie, ale na wolności zobaczysz niektóre, które nie są.
jcdyer

7
Możesz także użyć trzech pojedynczych cudzysłowów (zamiast trzech podwójnych cudzysłowów), aby otworzyć i zamknąć ciąg dokumentów.
Craig McQueen

nie powinieneś również wciskać komentarza?
joctee

25

Użyj sznurka, tak jak inni już napisali.

Możesz nawet pójść o krok dalej i dodać doctest do swojego dokumentu, dzięki czemu automatyczne testowanie funkcji jest bardzo proste.


3
Ta odpowiedź jest dość słaba bez przejścia na linkowaną stronę.
xaxxon

18

Użyj docstringu :

Literał łańcuchowy występujący jako pierwsza instrukcja w definicji modułu, funkcji, klasy lub metody. Taki ciąg dokumentów staje się __doc__specjalnym atrybutem tego obiektu.

Wszystkie moduły powinny normalnie mieć ciągi dokumentacyjne, a wszystkie funkcje i klasy eksportowane przez moduł powinny również mieć ciągi dokumentacyjne. Metody publiczne (w tym __init__konstruktor) również powinny mieć ciągi dokumentacyjne. Pakiet można udokumentować w dokumentacji modułu __init__.pypliku w katalogu pakietu.

Literały łańcuchowe występujące w innym miejscu kodu Pythona mogą również służyć jako dokumentacja. Nie są rozpoznawane przez kompilator kodu bajtowego Pythona i nie są dostępne jako atrybuty obiektów środowiska wykonawczego (tj. Nie są do nich przypisane __doc__), ale narzędzia programowe mogą wyodrębnić dwa typy dodatkowych ciągów dokumentów:

  1. Literały łańcuchowe występujące bezpośrednio po prostym przypisaniu na najwyższym poziomie modułu, klasy lub __init__metody nazywane są „ciągami dokumentów atrybutów”.
  2. Literały tekstowe występujące bezpośrednio po innym łańcuchu dokumentów nazywane są „dodatkowymi ciągami dokumentacyjnymi”.

Szczegółowy opis atrybutu i dodatkowe dokumenty można znaleźć w PEP 258 , „Specyfikacja projektu Docutils” [2].


10

Zasady dobrego komentowania są dość subiektywne, ale oto kilka wskazówek:

  • Komentarze funkcyjne powinny opisywać zamiar z funkcji, a nie realizacji
  • Przedstaw wszelkie założenia, które twoja funkcja przyjmuje w odniesieniu do stanu systemu. Jeśli używa jakichkolwiek zmiennych globalnych (tsk, tsk), wymień je.
  • Uważaj na nadmierną grafikę ASCII . Może się wydawać, że posiadanie długich ciągów skrótów sprawia, że ​​komentarze są bardziej czytelne, ale mogą być irytujące, gdy się zmieniają
  • Skorzystaj z funkcji językowych, które zapewniają „automatyczną dokumentację”, tj. Ciągi dokumentacyjne w Pythonie, POD w Perlu i Javadoc w Javie

7
nie ma w tym nic subiektywnego, Python bardzo jasno mówi o używaniu komentarzy Docstring.

@fuzzy lollipop, doceniam komentarz, ale zauważysz, że moja ostatnia uwaga dokładnie to dotyczy. Być może pytanie OP dotyczy tylko mechaniki komentowania w Pythonie, ale nie sądzę, aby moja odpowiedź uzasadniała głosowanie
negatywne

7

Przeczytaj o używaniu ciągów dokumentów w kodzie Pythona.

Zgodnie z konwencjami docstringowymi Pythona :

Dokumentacja funkcji lub metody powinna podsumować jej zachowanie i udokumentować jej argumenty, zwracane wartości, skutki uboczne, zgłoszone wyjątki i ograniczenia dotyczące tego, kiedy można ją wywołać (wszystkie, jeśli mają zastosowanie). Należy wskazać argumenty opcjonalne. Należy udokumentować, czy argumenty słów kluczowych są częścią interfejsu.

Nie będzie złotej zasady, ale raczej dawaj komentarze, które znaczą coś dla innych programistów w Twoim zespole (jeśli takiego masz) lub nawet dla siebie, gdy wrócisz do tego sześć miesięcy później.


5

Wybrałbym praktykę dokumentacji, która integruje się z narzędziem dokumentacyjnym, takim jak Sphinx .

Pierwszym krokiem jest użycie docstring:

def add(self):
 """ Method which adds stuff
 """

2

Poszedłbym o krok dalej niż tylko powiedzenie „użyj sznurka dokumentacyjnego”. Wybierz narzędzie do generowania dokumentacji, takie jak pydoc lub epydoc (używam epydoc w pyparsingu) i używaj składni znaczników rozpoznawanej przez to narzędzie. Uruchamiaj to narzędzie często podczas programowania, aby zidentyfikować dziury w dokumentacji. W rzeczywistości możesz nawet skorzystać na napisaniu dokumentacji dla członków klasy przed jej zaimplementowaniem.


2

Stosować docstrings .

Oto wbudowana zalecana konwencja w PyCharm dla komentarzy do opisu funkcji:

def test_function(p1, p2, p3):
    """
    my function does blah blah blah

    :param p1: 
    :param p2: 
    :param p3: 
    :return: 
    """

Czy nie powinno to być wcięte (po linii z def)? (To nie jest pytanie retoryczne)
Peter Mortensen

0

Chociaż zgadzam się, że nie powinien to być komentarz, ale dokument, jak sugeruje większość (wszystkich?) Odpowiedzi, chcę dodać numpydoc (przewodnik po stylu dokumentów) .

Jeśli zrobisz to w ten sposób, możesz (1) automatycznie wygenerować dokumentację i (2) ludzie to rozpoznają i będą mieć łatwiejszy czas na odczytanie kodu.


0

Aby to zrobić, możesz użyć trzech cudzysłowów.

Możesz używać pojedynczych cudzysłowów:

def myfunction(para1,para2):
  '''
  The stuff inside the function
  '''

Lub podwójne cudzysłowy:

def myfunction(para1,para2):
  """
  The stuff inside the function
  """
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.