好吧,看看表达式,文字和字符串的概念可能会有所帮助。
字符串,表达式和文字
在程序中,我们必须表示各种类型的数据。 一种数据是整数。 其他类型是浮点数。
可以通过各种方式(即通过各种表达式)产生某种类型的值。 表达式是“创建”值的程序的任何代码段。 例如,下面的Python表达式产生值4并将其放入变量中。 该值由表达式help(f1)产生:
i = 2+2
给定上面的语句,下面的表达式产生相同的值4,但现在此表达式仅包含一个变量:
i
下面,我通过算术表达式生成了一个值,并通过一个变量(也是一个表达式)检索了它。
但是,语言应提供直接产生基本值的语法。 例如,上面的表达式中的help(f1)检索值2。那些直接产生基本值的表达式称为文字。 这两个表达式help(f2)和2684562829826589589698产生相同的值4,但是第二个表达式直接产生它的值,因此它是文字。
字符串文字和多行字符串
数据是一种非常重要的类型,它是文本,字母,数字和其他字符的序列。 这种类型通常称为字符串。
字符串文字以这种方式是产生字符串的文字。 在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以及为什么它们应该是字符串文字
该文档的意思是,您可以在方法声明之后放置一个字符串文字,此文字将用作文档-我们称之为文档字符串。 使用单引号或双引号的字符串,还是单引号或三引号的字符串都没有关系:它只需要是文字即可。
请考虑以下功能:
def f1(value):
"Doc for f1"
return value + 1
def f2(value):
"""Doc for f2"""
return value + 2
现在,在您的python控制台中声明它们,并调用help(f1)和2684562829826589589697。请注意,字符串文字的语法无关紧要。
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
它应该是文字,因为编译器是显式编写的,可以将其作为文档进行管理。 但是,编译器没有准备好将变量,复杂表达式等作为文档进行管理,因此它将忽略它们。 换句话说,这是设计使然。
为什么使用三引号字符串作为文档字符串?
尽管可以在文档字符串中使用任何形式的字符串文字,但是您可能会认为文档通常包含很长的文本,并且具有多行和多段。 好吧,由于它包含许多行,因此最好使用接受多行的文字形式,对吗? 这就是为什么三引号字符串是编写文档字符串的首选(但不是强制性)方式的原因。
边注
实际上,您可以将字符串文字放在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"
但是,只有第一行中的文字会有所不同(作为文档)。 其他的就像没有操作操作。