由于撇号,Python 中的字符串定义错误
String definition error in Python due to apostrophe number
在codefight中,有一道题:
Which of the given string definitions are incorrect?
s = 'abacaba'
s = "abacaba"
s = ' 'abacaba' '
s = ""abacaba""
s = ' ' 'abacaba' ' '
s = """abacaba"""
3和4中定义错误
我的问题是,如果 3 和 4 是定义字符串的错误方式,那么出于类似的推理,5 和 6 不应该是错误的吗?
回答你的问题
当您使用 3 个单引号或 3 个双引号时,您可以得到一个跨越 multiple lines
的字符串。这就是您将它用于文档字符串的原因。请看下面的例子。
>>> s ="""Hello
... whats going on
... thats it"""
>>> s
'Hello\nwhats going on\nthats it'
>>>
然而,当使用 2 个单引号 (''
) 或使用 2 个双引号 (""
) 时,如果您需要将字符串封装在它们的引号中,则应如下所示。
"'Hello'" or '\'Hello\''
'"Hello'" or "\"Hello\""
如果你不这样做 python 解释器期望 'Hello' 的值而不是将其视为字符串。
三重引号最常用于 python 中的方法描述。这些方法描述称为 docstrings
并表示为多行字符串文字 """ """
这是 python 中的示例。
def testdocstring():
"""
this is a test docstring method
:return: None
"""
pass
print testdocstring.__doc__
此 print
语句的输出将是:
this is a test docstring method
:return: None
编辑: 正如@Varad 和@abccd 提到的,它也用于多行字符串文字。
3 和 4 是错误的,因为 '' 是空字符串并且 abacaba 将被视为变量,因此您需要将其写为 '' + str(abacaba) + ''
这将连接您的字符串,并且您必须在之前分配 abacaba 的值使用。
现在,当您使用 """abacaba"""
python 时,您的答案将找到三个不同的字符串 ""
、"abacaba"
和 ""
,您的结果将是 'abacaba'
。
发生这种情况是因为您需要 +
符号来连接存储在变量中的字符串,但是对于像 "abc"
和 "xyz"
这样的字符串,如果您编写 s="abc" "xyz"
或 s="abc""xyz"
您将得到结果'abcxyz'
这里有几个例子供您参考:
>>> s="abc" "xyz"
>>> s
'abcxyz'
>>> s="1""abc""1"
>>> s
'1abc1'
>>> s="1" "abc" "1"
>>> s
'1abc1'
>>> s="1"abc"1"
SyntaxError: invalid syntax
>>> abc="2"
>>> s="1"abc"1"
SyntaxError: invalid syntax
>>> s="1"+abc+"1"
>>> s
'121'
>>> s=r"""abc""" # raw string which will treat all content/special character between "" as your string
>>> s
'abc'
在codefight中,有一道题:
Which of the given string definitions are incorrect?
s = 'abacaba'
s = "abacaba"
s = ' 'abacaba' '
s = ""abacaba""
s = ' ' 'abacaba' ' '
s = """abacaba"""
3和4中定义错误
我的问题是,如果 3 和 4 是定义字符串的错误方式,那么出于类似的推理,5 和 6 不应该是错误的吗?
回答你的问题
当您使用 3 个单引号或 3 个双引号时,您可以得到一个跨越 multiple lines
的字符串。这就是您将它用于文档字符串的原因。请看下面的例子。
>>> s ="""Hello
... whats going on
... thats it"""
>>> s
'Hello\nwhats going on\nthats it'
>>>
然而,当使用 2 个单引号 (''
) 或使用 2 个双引号 (""
) 时,如果您需要将字符串封装在它们的引号中,则应如下所示。
"'Hello'" or '\'Hello\''
'"Hello'" or "\"Hello\""
如果你不这样做 python 解释器期望 'Hello' 的值而不是将其视为字符串。
三重引号最常用于 python 中的方法描述。这些方法描述称为 docstrings
并表示为多行字符串文字 """ """
这是 python 中的示例。
def testdocstring():
"""
this is a test docstring method
:return: None
"""
pass
print testdocstring.__doc__
此 print
语句的输出将是:
this is a test docstring method
:return: None
编辑: 正如@Varad 和@abccd 提到的,它也用于多行字符串文字。
3 和 4 是错误的,因为 '' 是空字符串并且 abacaba 将被视为变量,因此您需要将其写为 '' + str(abacaba) + ''
这将连接您的字符串,并且您必须在之前分配 abacaba 的值使用。
现在,当您使用 """abacaba"""
python 时,您的答案将找到三个不同的字符串 ""
、"abacaba"
和 ""
,您的结果将是 'abacaba'
。
发生这种情况是因为您需要 +
符号来连接存储在变量中的字符串,但是对于像 "abc"
和 "xyz"
这样的字符串,如果您编写 s="abc" "xyz"
或 s="abc""xyz"
您将得到结果'abcxyz'
这里有几个例子供您参考:
>>> s="abc" "xyz"
>>> s
'abcxyz'
>>> s="1""abc""1"
>>> s
'1abc1'
>>> s="1" "abc" "1"
>>> s
'1abc1'
>>> s="1"abc"1"
SyntaxError: invalid syntax
>>> abc="2"
>>> s="1"abc"1"
SyntaxError: invalid syntax
>>> s="1"+abc+"1"
>>> s
'121'
>>> s=r"""abc""" # raw string which will treat all content/special character between "" as your string
>>> s
'abc'