由于撇号,Python 中的字符串定义错误

String definition error in Python due to apostrophe number

在codefight中,有一道题:

Which of the given string definitions are incorrect?

  1. s = 'abacaba'

  2. s = "abacaba"

  3. s = ' 'abacaba' '

  4. s = ""abacaba""

  5. s = ' ' 'abacaba' ' '

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