python - 引号内的报价

python - 引号内的报价,第1张

在Python 3.x中:

    print(""s"")       # SyntaxError
    print("""s""")     # prints s
    print(""""s"""")   # SyntaxError
    print("""""s""""") # prints ""s

当字符串中有不同数量的双引号时,这种不同行为背后的原因是什么?

最佳答案:

3 个答案:

答案 0 :(得分:6)

在Python中,您可以使用"""..."""创建多行字符串。引用documentation for strings,

  

字符串文字可以跨越多行。一种方法是使用三引号:"""..."""'''...'''

在您的第一种情况中,""s""被解析为

"" (empty string literal)  s  "" (empty string literal)

现在,Python不知道如何处理s。这就是SyntaxError失败的原因。

在你的第三种情况中,字符串被解析为

"""  "s  """ (End of multiline string)  `"`

现在最后一个"没有匹配"。这就是它失败的原因。

在最后一种情况中,"""""s"""""被解析为

"""  ""s  """  ""

因此,多线字符串被成功解析,然后您旁边有一个空字符串文字。在Python中,您可以通过将它们彼此相邻地连接起来来连接两个字符串文字,就像这样

print ("a" "b")
# ab

因此,最后一个空字符串文字与""s连接。

答案 1 :(得分:3)

要理解这一点,您需要了解两件事:

  1. 与常规字符串"foo"一样,Python有多行字符串,使用三个引号"""foo"""打开和关闭(请参阅String Literals });和
  2. 连续字符串文字连接"foo" "bar" == "foobar"(请参阅String Literal Concatenation)。
  3. 至于你的四个例子:

    ""s""
    

    s出现之前关闭单引号,因此相当于:

    x = ""
    x s x
    

    这显然毫无意义。

    """s"""
    

    是一个多行字符串,其中包含一个字符。

    """"s""""
    

    是一个包含两个字符("s)的多行字符串,后跟一个不匹配的引号。

    """""s"""""
    

    是一个多行字符串,包含连接到空字符串文字的三个字符(""s)。

    答案 2 :(得分:1)

    从C继承的字符串文字串联规则对此负责。考虑一下:

    x = "a" "b"
    

    根据Python语法,两个字符串连接成一个字符串。

    另一个方面是三重引用的字符串(用于多线字符串,如doc字符串)也存在,这进一步使问题复杂化。在那里,开头的三重报价与下一个三重报价相匹配。

    现在,请考虑您的案例是轻量级,并将每个双引号或三重引号分组。您会发现,在一个案例中,您在中间有一个令牌s,有时s是字符串的一部分,有时末尾有剩余的引号等。

    本文经用户投稿或网站收集转载,如有侵权请联系本站。

发表评论

0条回复