Python'daki işlevleri yorumlamanın doğru yolu nedir?


174

Python'daki işlevleri yorumlamanın genel kabul gören bir yolu var mı? Aşağıdakiler kabul edilebilir mi?

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

Yanıtlar:


318

Bunu yapmanın doğru yolu bir doktora sağlamaktır. Bu şekilde, help(add)yorumunuzu da tüküreceksiniz.

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

Bu yorumu açmak için üç çift tırnak ve bitirmek için başka üç çift tırnak. Geçerli herhangi bir Python dizesini de kullanabilirsiniz. Çok satırlı olması gerekmez ve çift tırnaklar tek tırnaklarla değiştirilebilir.

Bakınız: PEP 257


10
Üçlü alıntı yapılması gerekmediğini unutmayın; herhangi bir dizgi değişmezi çalışır. Ancak çok satırlı bir dizeye daha fazla bilgi koyabilirsiniz.
Ignacio Vazquez-Abrams

5
Her ne kadar konvansiyonun üçlü alıntı yapması gerektiğini belirtir. Hiç bir doktora görmedim.
Chinmay Kanchi

2
Bu kabul etmediğim anlamına gelmiyor. Üçlü alıntı olmalılar, ama vahşi olmayan bazı göreceksiniz.
jcdyer

7
Ayrıca öğretiyi açmak ve kapatmak için üç tek tırnak (üç çift tırnak yerine) kullanabilirsiniz.
Craig McQueen

yorumu da girintilendirmemelisin?
joctee

25

Diğerleri zaten yazdığı gibi, bir doktora kullanın.

Bir adım daha ileri gidebilir ve doktorunuza bir doctest ekleyebilirsiniz , böylece işlevlerinizin otomatik olarak test edilmesini kolaylaştırabilirsiniz.


3
Bu cevap, bağlantı verilen sayfayı takip etmeden oldukça zayıftır.
xaxxon

18

Bir docstring kullanın :

Bir modül, işlev, sınıf veya yöntem tanımında ilk deyim olarak gerçekleşen dize değişmezi. Böyle bir öğreti __doc__, o nesnenin özel niteliği haline gelir .

Tüm modüllerin normalde docstring'leri olmalı ve bir modül tarafından dışa aktarılan tüm fonksiyonlar ve sınıfların docstrings'i olmalıdır. Genel yöntemlerin ( __init__kurucu dahil ) ayrıca öğretileri de olmalıdır. Bir paket __init__.py, paket dizinindeki dosyanın modül öğretisinde belgelenebilir .

Python kodunun başka bir yerinde meydana gelen dize değişmezleri de belge işlevi görebilir. Python bayt kodu derleyicisi tarafından tanınmazlar ve çalışma zamanı nesne öznitelikleri olarak (yani __doc__atanmazlar) erişilemezler , ancak yazılım araçları tarafından iki tür ekstra docstring çıkarılabilir:

  1. Bir modül, sınıf veya __init__yöntemin en üst düzeyinde basit bir atamadan hemen sonra meydana gelen dize değişmezleri "öznitelik docstrings" olarak adlandırılır.
  2. Başka bir doktrinden hemen sonra meydana gelen dize değişmezleri "ek docstrings" olarak adlandırılır.

Özniteliğin ve ek öğretilerin ayrıntılı açıklaması için lütfen PEP 258 , "Doküman Tasarımı Spesifikasyonu" [2] 'na bakın ...


10

İyi yorumlama ilkeleri oldukça özneldir, ancak işte bazı yönergeler:

  • İşlev yorumları uygulamanın değil bir işlevin amacını tanımlamalıdır
  • Sistem durumuyla ilgili olarak işlevinizin yaptığı varsayımları özetleyin. Global değişkenler (tsk, tsk) kullanıyorsa, bunları listeleyin.
  • Aşırı ASCII sanatına dikkat edin . Uzun karma dizelere sahip olmak yorumların okunmasını kolaylaştırıyor gibi görünebilir, ancak yorumlar değiştiğinde uğraşmak rahatsız edici olabilir
  • 'Otomatik dokümantasyon' sağlayan dil özelliklerinden yararlanın, örneğin Python'daki dokümanlar, Perl'deki POD ve Java'daki Javadoc

7
bu konuda öznel bir şey yok, Python Docstring yorumlarını kullanma konusunda çok açık.

@fuzzy lollipop, yorumu takdir ediyorum, ama son noktamın tam olarak bu noktayı işaret ettiğini göreceksiniz. Belki de OP'nin sorusu sadece Python'a yorum yapma mekaniği ile ilgili, ancak cevabımın aşağı oylamayı
gerektirdiğini düşünmüyorum

7

Python kodunuzda docstrings kullanma hakkında bilgi edinin .

Python doktora sözleşmelerine göre :

Bir işlev veya yöntemin öğretisi davranışını özetlemeli ve argümanlarını, dönüş değer (ler) ini, yan etkileri, ortaya çıkan istisnaları ve ne zaman çağrılabileceğine ilişkin kısıtlamaları belgelemelidir (varsa). İsteğe bağlı argümanlar belirtilmelidir. Anahtar kelime argümanlarının arayüzün bir parçası olup olmadığı belgelenmelidir.

Altın bir kural olmayacak, bunun yerine ekibinizdeki diğer geliştiricilere (eğer varsa) veya hatta altı ay yolda geri döndüğünüzde kendinize bir şey ifade eden yorumlar sağlayın.


5

Sphinx gibi bir dokümantasyon aracıyla bütünleşen bir dokümantasyon uygulaması için giderdim .

İlk adım a docstring:

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

2

Sadece bir "doktora kullan" demekten bir adım daha ileri giderdim. Pydoc veya epydoc gibi bir belge oluşturma aracı seçin (pyparsing'te epydoc kullanıyorum) ve bu araç tarafından tanınan biçimlendirme sözdizimini kullanın. Belgelerinizdeki delikleri tanımlamak için geliştirme sırasında bu aracı sık sık çalıştırın. Aslında, sınıfı uygulamadan önce sınıf üyeleri için öğretileri yazmaktan da faydalanabilirsiniz .


2

Öğretileri kullanın .

Bu, işlev açıklaması yorumları için PyCharm'da önerilen önerilen kongre :

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

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

Girintili olmamalı mı (satırdan sonra def)? (Retorik bir soru değil.)
Peter Mortensen


0

Bunu yapmak için üç tırnak kullanabilirsiniz.

Tek tırnak kullanabilirsiniz:

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

Veya çift tırnak:

def myfunction(para1,para2):
  """
  The stuff inside the function
  """
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.