Python中注释函数的正确方法是什么?

Python中注释函数的正确方法是什么?,python,Python,在Python中是否有一种公认的注释函数的方法?以下情况是否可以接受 ######################################################### # Create a new user ######################################################### def add(self): 阅读有关在Python代码中使用的内容 根据Python文档字符串约定: 函数或方法的docstring应该总结其行为,并记录

在Python中是否有一种公认的注释函数的方法?以下情况是否可以接受

#########################################################
# Create a new user
#########################################################
def add(self):
阅读有关在Python代码中使用的内容

根据Python文档字符串约定:

函数或方法的docstring应该总结其行为,并记录其参数、返回值、副作用、引发的异常以及何时可以调用它的限制(如果适用的话)。应指明可选参数。应该记录关键字参数是否是接口的一部分


这里没有黄金法则,而是提供对团队中的其他开发人员(如果您有)或甚至对您自己有意义的注释,当您在六个月后再次使用它时。

正确的方法是提供一个文档字符串。这样,
help(add)
也会给出您的评论

def add(self):
    """Create a new user.
    Line 2 of comment...
    And so on... 
    """
这是三个双引号来打开评论,另外三个双引号来结束它。您还可以使用任何有效的Python字符串。它不需要是多行的,双引号可以用单引号代替


请参阅:

我会选择与文档工具集成的文档实践,如

第一步是使用
docstring

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

作为模块、函数、类或方法定义中的第一条语句出现的字符串文字。这样的docstring成为该对象的
\uuuu doc\uuuu
特殊属性

所有模块通常都应该有docstring,模块导出的所有函数和类也应该有docstring。公共方法(包括
\uuu init\uu
构造函数)也应该有docstring。包可以记录在包目录中
\uuuuu init\uuuuuuupy
文件的模块docstring中

Python代码中其他地方出现的字符串文字也可以用作文档。Python字节码编译器无法识别它们,并且无法作为运行时对象属性访问它们(即未分配给
\uuuu doc\uuu
),但软件工具可以提取两种类型的额外docstring:

  • 在模块、类或
    \uuuu init\uuuu
    方法的顶层简单赋值之后立即出现的字符串文本称为“属性docstrings”
  • 紧跟在另一个docstring之后出现的字符串文本称为“附加docstring”
  • 有关属性和其他docstring的详细说明,请参阅“Docutils设计规范”


    正如其他人已经编写的那样,使用docstring


    您甚至可以更进一步,在docstring中添加一个,使功能的自动测试变得简单。

    好的评论原则是相当主观的,但这里有一些指导原则:

    • 函数注释应描述函数的意图,而不是实现
    • 概述您的函数对系统状态所做的任何假设。如果它使用任何全局变量(tsk,tsk),请列出这些变量
    • 小心过度使用。拥有长长的哈希字符串似乎可以使注释更容易阅读,但当注释发生变化时,处理它们可能会很烦人
    • 利用提供“自动文档”的语言特性,即Python中的docstring、Perl中的POD和Java中的Javadoc

    我会比仅仅说“使用docstring”更进一步。选择一个文档生成工具,例如pydoc或epydoc(我在pyparsing中使用epydoc),并使用该工具识别的标记语法。在进行开发时经常运行该工具,以确定文档中的漏洞。事实上,在实现类之前为类的成员编写docstring可能会让您受益匪浅。

    虽然我同意这不应该是注释,而是大多数(所有?)答案所建议的docstring,但我想补充一点

    如果您这样做,您可以(1)自动生成文档,(2)人们认识到这一点,并且更容易阅读您的代码。

    使用

    这是中使用docstring注释描述函数的内置建议约定:

    def test_function(p1, p2, p3):
        """
        test_function does blah blah blah.
    
        :param p1: describe about parameter p1
        :param p2: describe about parameter p2
        :param p3: describe about parameter p3
        :return: describe what it returns
        """ 
        pass
    

    你可以用三个引号来做这件事

    您可以使用单引号:

    def myfunction(para1,para2):
      '''
      The stuff inside the function
      '''
    
    def myfunction(para1,para2):
      """
      The stuff inside the function
      """
    
    或双引号:

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

    注意,它不必是三重引用的;任何字符串文字都可以。但你们可以把更多的信息放在一个多行字符串中,尽管按照惯例,它应该是三重引号。我从来没有见过一个不是的文档串,这并不是说我不同意。它们应该是三重引号,但在野外你会看到一些不是。你也可以用三个单引号(而不是三个双引号)来打开和关闭docstring。你不也应该缩进注释吗?这没有什么主观的,Python非常清楚如何使用docstring注释。@fuzzy lollipop,我很感谢你的评论,但你会注意到我的最后一点正好说明了这一点。也许OP的问题只是关于Python注释的机制,但我认为我的答案不值得往下说。如果没有链接页面,这个答案很弱。这不应该缩进(在带有
    def
    的行之后)吗?(不是反问。)我喜欢这种风格,但当我把鼠标悬停在我的函数上时,我得到的只是args->它没有显示任何描述性信息,没有任何想法?@RicardoSanchez你从哪个IDE获得这种风格?VS代码通常在鼠标悬停后显示所有内容,而Pycharm在鼠标悬停时不会显示任何内容。@ShwetabhShekhar我刚刚再次检查,它在VS代码上确实有效,一定是在更新之后,谢谢。