函数定义中带三个引号的字符串文本

2024-05-13 09:52:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在学习Python教程,在某种程度上,他们讨论了函数的第一个语句如何可以是字符串文字。就本例而言,这个字符串文字似乎是用三个"完成的,在example中给出

"""Print a Fibonacci series up to n."""

根据本文档,这将主要用于创建某种自动生成的文档。

所以我想知道这里是否有人能向我解释一下这些字符串的具体含义?


Tags: to函数字符串文档example教程语句fibonacci
3条回答

你所说的(我想)叫做docstrings(感谢Boud的链接)。

def foo():
    """This function does absolutely nothing"""

现在,如果您从解释器中键入help(foo),您将看到我在函数中输入的字符串。您还可以通过foo.__doc__访问该字符串

当然,字符串文字就是——文字字符串。

a = "This is a string literal"  #the string on the right side is a string literal, "a" is a string variable.

或者

foo("I'm passing this string literal to a function")

它们可以通过多种方式定义:

'single quotes'
"double quotes"
""" triple-double quotes """  #This can contain line breaks!

甚至

#This can contain line breaks too!  See?
''' triple-single 
    quotes '''

字符串文字只是源代码中字面上给定的字符串。它是docstring还是其他字符串并不重要。查看Python language documentation section on string literals了解所有详细信息,但您现在可能不需要这些详细信息。

举几个例子:

"abc"
'Guido'
r"""Norwegian Blue"""

好吧,看看表达式、文字和字符串的概念会有帮助。

字符串、表达式和文字

在程序中,我们必须表示各种类型的数据。一种是整数,另一种是浮点数。

某种类型的值可以通过各种方式产生,即通过各种表达式表达式是“创建”值的程序的任何片段。例如,下面的Python表达式生成值4并将其放入变量中。该值由表达式2+2产生:

i = 2+2

给定上面的语句,下面的表达式产生相同的值4,但是现在这个表达式只包含一个变量

i

下面,我通过算术表达式生成一个值,并通过变量检索它(这也是一个表达式)。

然而,语言应该提供直接产生基本值的语法。例如,上面表达式中的2检索值2。那些直接产生基本值的表达式称为文字。两个表达式2+24产生相同的值4,但是第二个表达式直接产生它,所以它是一个文本。

字符串文字和多行字符串

一种非常重要的数据类型是文本、一系列字母、数字和其他字符。这种类型通常称为字符串

这样,Astring literal就是生成字符串的literal。在Python中,这些文本通过多种方式进行标记(即,字符串文本有许多语法)。例如,可以在文字的开头或结尾处放置一个单引号或双引号:

"A string literal"

'Another string literal'

其他方法是将三个单引号或双引号放在同一位置。在这种情况下,文字可以跨越多行:

"""A single line string literal"""

"""A multiline
string literal"""

'''Another multiline
string literal'''

请注意,无论选择何种语法作为字符串文本,它都不会更改其值。单引号字符串等于具有相同字符的双引号字符串,三引号字符串等于具有相同内容的单引号字符串:

>>> "A single line string literal" == 'A single line string literal'
True

>>> """A single line string literal""" == "A single line string literal"
True

>>> # \n is the character that represents a new line
>>> "A multiline\nstring literal" == """A multiline
string literal""" 
True

Docstrings以及它们为什么应该是字符串文本

文档所说的是,您可以在方法声明之后放置一个字符串文本,这个文本将用作文档-我们用来调用adocstring。使用单引号或双引号字符串或单引号或三引号字符串并不重要:它只需要是文本

考虑以下功能:

def f1(value):
    "Doc for f1"
    return value + 1

def f2(value):
    """Doc for f2"""
    return value + 2

现在,在python控制台中声明它们并调用help(f1)help(f2)。请注意,字符串文本的语法无关紧要。

OTOH,不能使用其他表达式(如变量或字符串上的操作)来生成文档。因此下面函数第一行的字符串不是docstring

mydoc = "This is doc"
def f3(value):
     mydoc
     return value+3

 def f4(value):
     "This is no documentation " + "because it is concatenated"
     return value+4

它应该是一个文本,因为编译器是显式地编写来作为文档管理的。但是,编译器不准备将变量、复杂表达式等作为文档进行管理,因此将忽略它们。换句话说,这是设计的。

为什么使用三引号字符串作为docstring?

尽管任何形式的字符串文字都可以在docstring中使用,但您可能会认为文档通常包含非常长的文本,其中包含多行和多段。好吧,因为它包含许多行,所以最好使用接受多行的文字形式,对吧?这就是为什么三引号字符串是编写docstring的首选(但不是强制)方式的原因。

旁注

实际上,可以将字符串文字放在Python函数的任何位置:

 def flying_literals(param):
    "Oh, see, a string literal!"
    param += 2
    "Oh, see, ANOTHER string literal!"
    return param
    "the above literal is irrelevant, but this one can be still MORE IRRELEVANT"

然而,只有第一行中的文字才有区别(作为文件)。其他的就像没有操作一样。

相关问题 更多 >