“"Different"”、"quote"、'types'在函数中?
"""Different""", "quote", 'types' in function?
我想弄清楚不同的报价类型是否在功能上有所不同。我看到有人说它偏爱 ""
或 ''
,但 """ """
呢?我用一个简单的代码对其进行了测试,以查看它是否可以工作并且确实可以。我想知道 """ triple quotes """
是否具有定义函数参数的功能目的,或者它只是另一个可以像 ""
和 ''
一样互换使用的引用选项?
因为我看到很多人 post 关于 ""
和 ''
我还没有看到 post 关于 """ """
或 ''' '''
在函数中使用。
我的问题是:三重引号作为参数是否有独特的用途,或者它是否可以与 ""
和 ''
简单地互换?我认为它可能具有独特功能的原因是因为它是多行引用,我想知道它是否允许提交多行参数。我不确定这样的东西是否有用,但它可能有用。
这是一个示例,它使用我知道的所有引号类型打印出您期望的内容。
def myFun(var1="""different""",var2="quote",var3='types'):
return var1, var2, var3
print (myFun('All','''for''','one!'))
结果:
('All', 'for', 'one!')
编辑:
在对三重引号进行更多测试后,我确实发现使用 return 与在函数中打印的工作方式有所不同。
def myFun(var1="""different""",var2="""quote""",var3='types'):
return (var1, var2, var3)
print(myFun('This',
'''Can
Be
Multi''',
'line!'))
结果:
('This', 'Can\nBe\nMulti', 'line!')
或:
def myFun(var1="""different""",var2="""quote""",var3='types'):
print (var1, var2, var3)
myFun('This',
'''Can
Be
Multi''',
'line!')
结果:
This Can
Be
Multi line!
来自 the docs:
String literals can be enclosed in matching single quotes ('
) or double quotes ("
). They can also be enclosed in matching groups of three single or double quotes (these are generally referred to as triple-quoted strings). [...other rules applying identically to all string literal types omitted...]
In triple-quoted strings, unescaped newlines and quotes are allowed (and are retained), except that three unescaped quotes in a row terminate the string. (A “quote” is the character used to open the string, i.e. either '
or "
.)
因此,三引号字符串文字可以跨越多行,并且可以在不使用转义序列的情况下包含文字引号,但在其他方面与用其他引用类型表示的字符串文字完全相同(包括那些使用转义序列如\n
或\'
来表达相同内容的。
另请参阅 Python 3 文档:Bytes and String Literals -- 它表达了一组实际上相同的规则,但措辞略有不同。
language tutorial 中还提供了更温和的介绍,其中明确介绍了三引号作为允许字符串跨越多行的方式:
String literals can span multiple lines. One way is using triple-quotes: """..."""
or '''...'''
. End of lines are automatically included in the string, but it’s possible to prevent this by adding a \
at the end of the line. The following example:
print("""\
Usage: thingy [OPTIONS]
-h Display this usage message
-H hostname Hostname to connect to
""")
produces the following output (note that the initial newline is not included):
Usage: thingy [OPTIONS]
-h Display this usage message
-H hostname Hostname to connect to
要清楚,虽然:这些是不同的语法,但是它们创建的字符串文字彼此没有区别。也就是说,给定如下代码:
s1 = '''foo
'bar'
baz
'''
s2 = 'foo\n\'bar\'\nbaz\n'
无法通过查看 s1
和 s2
的值来区分它们:s1 == s2
是正确的,repr(s1) == repr(s2)
也是正确的。 Python 解释器甚至可以将它们保留为相同的值,因此它 可能 (或可能不)使 id(s1) == id(s2)
为真,具体取决于细节(例如是否代码在 REPL 中 运行 或 import
作为模块编辑)。
FWIW,我的理解是有一个约定,其中“””“””,''''''用于文档字符串,有点像#comment,但是是一个可以引用的可调用属性之后。 https://www.python.org/dev/peps/pep-0257/
我也是初学者,但我的理解是对字符串使用三重引号并不是最好的主意,即使 if 与您所做的功能差别不大目前(我不知道以后会不会)。坚持约定有助于其他人阅读和使用您的代码,这似乎是一个很好的经验法则,如果您不遵循某些约定,它们就会对您不利,例如在这种情况下,带有三重引号的格式错误的字符串将被解释为文档字符串,并且可能不会抛出错误,您需要搜索一堆代码才能找到问题所在。
我想弄清楚不同的报价类型是否在功能上有所不同。我看到有人说它偏爱 ""
或 ''
,但 """ """
呢?我用一个简单的代码对其进行了测试,以查看它是否可以工作并且确实可以。我想知道 """ triple quotes """
是否具有定义函数参数的功能目的,或者它只是另一个可以像 ""
和 ''
一样互换使用的引用选项?
因为我看到很多人 post 关于 ""
和 ''
我还没有看到 post 关于 """ """
或 ''' '''
在函数中使用。
我的问题是:三重引号作为参数是否有独特的用途,或者它是否可以与 ""
和 ''
简单地互换?我认为它可能具有独特功能的原因是因为它是多行引用,我想知道它是否允许提交多行参数。我不确定这样的东西是否有用,但它可能有用。
这是一个示例,它使用我知道的所有引号类型打印出您期望的内容。
def myFun(var1="""different""",var2="quote",var3='types'):
return var1, var2, var3
print (myFun('All','''for''','one!'))
结果:
('All', 'for', 'one!')
编辑:
在对三重引号进行更多测试后,我确实发现使用 return 与在函数中打印的工作方式有所不同。
def myFun(var1="""different""",var2="""quote""",var3='types'):
return (var1, var2, var3)
print(myFun('This',
'''Can
Be
Multi''',
'line!'))
结果:
('This', 'Can\nBe\nMulti', 'line!')
或:
def myFun(var1="""different""",var2="""quote""",var3='types'):
print (var1, var2, var3)
myFun('This',
'''Can
Be
Multi''',
'line!')
结果:
This Can
Be
Multi line!
来自 the docs:
String literals can be enclosed in matching single quotes (
'
) or double quotes ("
). They can also be enclosed in matching groups of three single or double quotes (these are generally referred to as triple-quoted strings). [...other rules applying identically to all string literal types omitted...]In triple-quoted strings, unescaped newlines and quotes are allowed (and are retained), except that three unescaped quotes in a row terminate the string. (A “quote” is the character used to open the string, i.e. either
'
or"
.)
因此,三引号字符串文字可以跨越多行,并且可以在不使用转义序列的情况下包含文字引号,但在其他方面与用其他引用类型表示的字符串文字完全相同(包括那些使用转义序列如\n
或\'
来表达相同内容的。
另请参阅 Python 3 文档:Bytes and String Literals -- 它表达了一组实际上相同的规则,但措辞略有不同。
language tutorial 中还提供了更温和的介绍,其中明确介绍了三引号作为允许字符串跨越多行的方式:
String literals can span multiple lines. One way is using triple-quotes:
"""..."""
or'''...'''
. End of lines are automatically included in the string, but it’s possible to prevent this by adding a\
at the end of the line. The following example:print("""\ Usage: thingy [OPTIONS] -h Display this usage message -H hostname Hostname to connect to """)
produces the following output (note that the initial newline is not included):
Usage: thingy [OPTIONS] -h Display this usage message -H hostname Hostname to connect to
要清楚,虽然:这些是不同的语法,但是它们创建的字符串文字彼此没有区别。也就是说,给定如下代码:
s1 = '''foo
'bar'
baz
'''
s2 = 'foo\n\'bar\'\nbaz\n'
无法通过查看 s1
和 s2
的值来区分它们:s1 == s2
是正确的,repr(s1) == repr(s2)
也是正确的。 Python 解释器甚至可以将它们保留为相同的值,因此它 可能 (或可能不)使 id(s1) == id(s2)
为真,具体取决于细节(例如是否代码在 REPL 中 运行 或 import
作为模块编辑)。
FWIW,我的理解是有一个约定,其中“””“””,''''''用于文档字符串,有点像#comment,但是是一个可以引用的可调用属性之后。 https://www.python.org/dev/peps/pep-0257/
我也是初学者,但我的理解是对字符串使用三重引号并不是最好的主意,即使 if 与您所做的功能差别不大目前(我不知道以后会不会)。坚持约定有助于其他人阅读和使用您的代码,这似乎是一个很好的经验法则,如果您不遵循某些约定,它们就会对您不利,例如在这种情况下,带有三重引号的格式错误的字符串将被解释为文档字符串,并且可能不会抛出错误,您需要搜索一堆代码才能找到问题所在。