文档字符串可以包含多个字符串文字吗?

时间:2013-12-24 07:44:29

标签: python syntax multiline string-literals docstring

Python docstring可以写成一系列单行字符串文字吗?例如,而不是

def bar():
  """My function.

  That does foo.
  """
  ...

def bar():
  "My function.\n"
  "\n"
  "That does foo.\n"
  ...

我知道这可能看起来有点奇怪而且可读性差得多。我想这样做的原因是我正在实现一个Python代码生成器/漂亮的打印机。文档字符串的问题在于它们不是语法特征,它们是具有特殊含义的字符串。我对Python代码的表示纯粹是语法,因此我无法区分字符串是否是文档字符串。因此,我需要一种方法,如何以不改变其内容的方式统一打印所有字符串(例如,多行文档字符串的确切值取决于缩进)。

2 个答案:

答案 0 :(得分:3)

只有第一个字符串才会被视为该函数的docstring。此外,它必须在之后来,而不是之前。

>>> def bar():
...   """My function.
...   
...   That does foo.
...   """
...   pass
... 
>>> bar.__doc__
'My function.\n  \n  That does foo.\n  '
>>> 
>>> 
>>> def bar():
...   "My function.\n"
...   "\n"
...   "That does foo.\n"
...   pass
... 
>>> bar.__doc__
'My function.\n'

根据您问题中的示例,您可能正在寻找" 其他文档字符串"。来自PEP 257

  

Python代码中其他地方出现的字符串文字也可以作为文档。它们不能被Python字节码编译器识别,并且不能作为运行时对象属性访问(即未分配给__doc__,但软件工具可以提取两种类型的额外文档字符串:< / p>      

      
  1. 在模块,类或__init__方法的顶层进行简单赋值后立即出现的字符串文字被称为&#34;属性docstrings&#34;。
  2.   
  3. 字符串文字在另一个docstring 之后立即发生&#34;其他文档字符串&#34;。
  4.   

PEP 258 - Docutils设计规范提供了有关属性和additional docstrings的更多信息。

答案 1 :(得分:2)

不,至少在文档字符串的情况下它们不会被连接起来

In [1]: def a():
   ...:     'some '
   ...:     'text '
   ...:     'here '
   ...:     pass
   ...:

In [2]: def b():
   ...:     '''some
   ...:     text
   ...:     here
   ...:     '''
   ...:     pass
   ...:

In [3]: a.__doc__
Out[3]: 'some '

In [4]: b.__doc__
Out[4]: 'some\n    text\n    here\n    '

这是可以理解的,因为这两个也是完全不同的陈述:

a = '''
some
text
'''

b = 'some'
'text'