在函数定义中带有三个引号的string文字

我正在关注Python教程,并且在某个时候他们讨论了函数的第一条语句如何可以是string文字。 就这个例子而言,这个string文字似乎是用三个" S "来完成的,在这个例子中

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

根据这个文档,这将主要用于创build一些自动生成的文档。

所以我想知道这里的人是否可以向我解释这些string是什么?

你在说什么(我认为)被称为docstrings (感谢Boud的链接)。

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

现在,如果你从解释器中inputhelp(foo) ,你将会看到我放入函数的string。 您也可以通过foo.__doc__访问该string

当然,string文字就是这个 – 文字string。

 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 ''' 

那么,看一下expression式,文字和string的概念是有帮助的。

string,expression式和文字

在一个程序中,我们必须表示各种types的数据。 一种types的数据是整数; 其他types是漂浮品脱数字。 一个非常重要的数据types是文本,一系列字母,数字和其他字符。 这种types通常称为string

某种types的值可以通过各种方式产生。 例如,下面的Pythonexpression式产生值4,并把它放在一个variables中。 该值由expression式 2+2

 i = 2+2 

给定上面的expression式,下面的expression式产生相同的值4,但是现在这个expression式只包含一个variables

 i 

下面,我通过expression式生成一个值,并通过一个variables来检索它。

但是,语言应该提供一个直接产生基本值的语法。 例如,上述expression式中的2将检索值2.直接生成基本值的expression式称为文字 。 expression式2+24产生相同的值4,但是第二个expression式直接产生它,如果你知道我的意思,那么它是一个文字。

string文字和多行string

string文字就是这样的一个string,它产生一个string。 在Python中,这些文字标记有很多方法。 两种方法是在文字的开头或结尾处加上单引号或双引号:

 "A string literal" 'Another string literal' 

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

 """A single line string literal""" """A multiline string literal""" '''Another multiline string literal''' 

请注意,生成string文字的方法不会更改其值。 单引号string等于具有相同字符的双引号string,而三引号string等于具有相同内容的单引号string:

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

Docstrings和为什么他们应该是string文字

这个文档说的是你可以在方法声明后面放一个string,这个文字将被用作文档 – 我们用来调用一个文档string 。 如果使用单引号或双引号string,或者使用单引号或三引号string,则无关紧要。 考虑以下function:

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

现在,在你的python控制台中声明它们,然后调用help(f1)help(f2) 。 请注意,string的声明并不重要。 OTOH,您不能使用其他expression式(如variables或string操作)来生成文档。 所以在下面的函数的第一行的string是没有文档string

 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 

它应该是一个文字,因为编译器准备将其作为文档进行pipe理。 但是,编译器并不准备将variables,复杂expression式等作为文档来pipe理,因此将忽略它​​们。

为什么使用三重报价string作为文档?

尽pipe任何forms的string文字都可以在文档中使用,但是您可能会认为文档通常包含非常长的文本,包含多行和多段文字。 那么,因为它包含了各种各样的行,所以build议使用接受多行的文字forms,对吗? 这就是为什么三重string是写文档的首选(但不是强制性)的原因。

一个边缘笔记

实际上,你可以把一个string文字放在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" 

但是,只有第一行的文字才会有所不同(作为文档)。 其他的就像没有操作一样。

string文字只是字面上在源代码中给出的string。 无论是文档string还是其他string都无关紧要。 有关所有细节,请参阅Python语言文档部分的string文字 ,但您现在可能不需要这些细节。

几个例子:

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

string文字是许多引用选项之一中的一个string,它没有分配给variables。

所以,

 "String" # string literal 'string' # string literal """ Multiline String Literal """ foo = "string variable" 

如果在def块之后立即有一个string文字,它将成为该方法文档的一部分,并称为文档string

 def foo(hello): """This is part of the documentation for foo""" 

这是你将如何使用它:

 >>> def foo(hello): ... """This is the docstring""" ... pass ... >>> foo.__doc__ 'This is the docstring' 

在Python中有几种方法可以将string分成多行。 string文字是其中之一,例如:

 s = """Hello, world""" print(s) >>> Hello, >>> world #Notice, that spaces used in the literal are kept. 

但正如你注意到的,string文字通常是在线文档

 class MyClass(object): """This is my class it does this and that. It has some cool features and I may tell you about them below. """ def my_method(self): """This is a brief description of my method.""" def important_method(self): """Because this method is important, I'm going to tell you a lot about it. For example... """ 

在你问之前,将string拆分成多行的一种好方法是神圣的Python括号:

 s = ('This is a very very long string. ' 'I have to split it to multiple lines. ' 'Whoa! It works!') print(s) >>> This is a very very long string. I have to split it to multiple lines. Whoa! It works! 

您可能需要遵循PEP-8,即“每行不超过80个字符”。

快乐的Python黑客!

他们是像任何其他string,他们周围有一对'"'''"""string。
推荐的forms是三重双引号:

 def some_function(s): """this is documentation for some_function""" print(s)