当字符串周围的引号不匹配时,为什么 Python 不会给出任何错误?

W. *_*R. 67 python string quotes python-3.x

我最近开始学习 Python,我不明白为什么 Python 会这样:

>>> “好的”
'好的'
>>> """好的"""
'好的'
>>>“不好”
  文件“<stdin>”,第 1 行
    “不好'
           ^
语法错误:扫描字符串文字时 EOL
>>> "不行"""
'不好'

由于引号的数量不匹配,为什么最后一条语句不会出错?

che*_*ner 111

final"""不被识别为三重引号,而是单个"(用于关闭当前字符串文字)后跟一个空字符串"";两个并列的字符串文字被连接起来。通过在关闭和打开之间放置一个空格可以更容易地识别相同的行为"

>>> "not OK" ""
'not OK'
Run Code Online (Sandbox Code Playgroud)

  • 为了进一步推动这个回家:`&gt;&gt;&gt;“ok”''`和`&gt;&gt;&gt;'ok'“”` (16认同)
  • 旁白:@DukeSilver 不要认为将“&gt;&gt;&gt;”放在代码片段前面在注释中的效果与在问题和答案中的效果一样好。对于某些人来说,它可能看起来像是您正在使用的奇怪的外星运算符,而“ok”''`则完全清晰易读。 (8认同)
  • @nick012000 我知道,这就是为什么它在问题和答案中表现良好的原因。我的观点是,评论中没有必要,而且可能会造成混乱。 (8认同)

San*_*Joy 31

"not OK"""

Python 将其解释为 "not OK"+""

如果你给"not Ok""ay",你会得到输出'not Okay'

  • 当 Python 扫描开头引号时,它更喜欢三引号而不是普通引号。但开盘价一旦确定,收盘价也就确定了;因此,如果字符串以普通双引号开头,则另一端仅使用一个双引号,其后的任何内容都是下一个标记的一部分。 (9认同)
  • """ok" ,所以在 python 中,如果需要,""" 三引号用于创建多行字符串。因此,当 python 找到三引号时,它会查找开头三引号的结尾三引号。 (3认同)

小智 9

你会认为 " 或 ' 之间没有区别,但实际上,Python 使用贪婪的方法来接受输入。

一旦 Python 看到匹配的引用,语句就结束了。

这就是为什么您可以编写类似"'s" "". 在字符串中有一个'但是因为你在一个字符串中,python 不会引发错误。然后在那之后,有一个"后跟"但那是一个不同的(空)字符串。

如果您执行类似的操作,"s'那么 Python 会"在运行您的命令之前寻找下一个。

  • 这不是“贪婪”的意思。贪婪意味着当您创建像“A.*B”这样的正则表达式来匹配字符串时,但它最终会匹配诸如“ABBB”之类的内容,而不仅仅是“AB”,因为正则表达式是“贪婪的”。 (10认同)
  • 为什么称这种方法为“贪婪”? (5认同)
  • 赞同上面的拍笑:这实际上与*贪婪*完全相反:这是一个**懒惰**算法。 (4认同)
  • 因为这是对一类算法的一般描述,这些算法采用“第一个适合的东西”,即使后面的选择会更好。 (3认同)