Python 引号中的引号

Python 引号中的引号,python,string,python-3.x,double-quotes,Python,String,Python 3.x,Double Quotes,在Python 3.x中: print(""s"") # SyntaxError print("""s""") # prints s print(""""s"""") # SyntaxError print("""""s""""") # prints ""s 当字符串中有不同数量的双引号时,这种不同行为背后的原因是什么?在Python中,您可以使用“…”创建多行字符串。引用 字符串文字可以跨越多行。一种方法是使用三重引号:“…”或“…”

在Python 3.x中:

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

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

在Python中,您可以使用
“…”创建多行字符串。引用

字符串文字可以跨越多行。一种方法是使用三重引号:
“…”
“…”

在第一种情况下,
“s”
的解析如下

print ("a" "b")
# ab
“”(空字符串文字)s“”(空字符串文字)
现在,Python不知道如何处理
s
。这就是为什么它在
SyntaxError
中失败的原因

在第三种情况下,字符串解析如下

print ("a" "b")
# ab
“s”(多行字符串的结尾)``
现在最后一个
没有匹配的
。这就是它失败的原因

在最后一种情况下,
“s”
的解析如下

print ("a" "b")
# ab
“s”
因此,多行字符串被成功解析,然后它旁边有一个空字符串文本。在Python中,您可以通过将两个字符串文本相邻写入来连接它们,如下所示

print ("a" "b")
# ab

因此,最后一个空字符串文字与
“s

连接。从C继承的字符串文字连接规则负责这一点。考虑这一点:

x = "a" "b"
根据Python语法,这两个字符串被合并为一个字符串

另一方面,还存在三重引号字符串(用于多行字符串,如doc字符串),这使问题更加复杂。在这里,开始的三重引号与下一个三重引号匹配


现在,考虑你的情况是轻的,并分组每个双引号或三引号。你会发现,在一种情况下,中间有一个令牌<代码> s>代码>,有时代码> S/<代码>是字符串的一部分,有时在结尾有剩余的引号等。

< P>有两件事需要了解:

  • 除了常规字符串之外,“foo”
  • Python还有多行字符串,它们用三个引号打开和关闭
    “foo”
    (请参阅);及
  • 连续的字符串文字被连接起来
    “foo”“bar”==“foobar”
    (请参阅) 至于你的四个例子:

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

    x = ""
    x s x
    
    这显然毫无意义

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

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

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