Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python docstring可以由多个字符串文本组成吗?_Python_Syntax_Multiline_String Literals_Docstring - Fatal编程技术网

Python docstring可以由多个字符串文本组成吗?

Python docstring可以由多个字符串文本组成吗?,python,syntax,multiline,string-literals,docstring,Python,Syntax,Multiline,String Literals,Docstring,Python文档字符串是否可以编写为一系列单行字符串文字?例如,代替 def bar(): """My function. That does foo. """ ... 写 def bar(): "My function.\n" "\n" "That does foo.\n" ... 我理解这可能看起来有点奇怪,可读性差得多。我之所以要这样做,是因为我正在实现一个Python代码生成器/漂亮的打印机。docstring的问题在于它们不是一个语法特征,它们是具

Python文档字符串是否可以编写为一系列单行字符串文字?例如,代替

def bar():
  """My function.

  That does foo.
  """
  ...

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

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

不,至少在docstring的情况下,它们不会连接在一起

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'

不,至少在docstring的情况下,它们不会被连接

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'

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

>>> 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'
根据问题中的示例,您可能正在寻找“其他文档字符串”。发件人:

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

  • 在模块、类或
    \uuuu init\uuuu
    方法的顶层简单赋值之后立即出现的字符串文本称为“属性docstrings”
  • 紧跟在另一个docstring之后出现的字符串文本称为“附加docstring”

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

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

    >>> 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'
    
    根据问题中的示例,您可能正在寻找“其他文档字符串”。发件人:

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

  • 在模块、类或
    \uuuu init\uuuu
    方法的顶层简单赋值之后立即出现的字符串文本称为“属性docstrings”
  • 紧跟在另一个docstring之后出现的字符串文本称为“附加docstring”

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

    您可以通过获取文档化函数的
    \uuuu doc\uuuu
    等来自己测试这一点。您编写的不是docstring。Docstrings是方法体中的第一个元素,而不是之前的元素,正如您所示。我认为在我的答案中包含Docstrings不是一件好事,但我已经为您编写了一个Python格式化程序,它可以处理大部分标记化,可能会有所帮助:@PaulMcGuire感谢您提醒我,当然,我会解决这个问题(我更习惯于将文档放在语句之前的语言)。您可以通过获取文档化函数的
    \uuuu doc\uuuu
    等来自己测试这一点。您编写的不是docstring。docstring是方法体中的第一个元素,而不是如您所示的在它之前。我不认为在我的答案中包含它会很好,但我已经编写了一个Python格式化程序来处理这对您来说已经是一个很好的标记化部分,可能会有所帮助:@PaulMcGuire感谢您提醒我,当然,我会解决这个问题(我更习惯于将文档放在语句之前的语言)。