gpt4 book ai didi

python - 字符串转义字符

转载 作者:太空宇宙 更新时间:2023-11-04 10:34:33 25 4
gpt4 key购买 nike

谁能解释一下:

In [9]: str( """w'o"w""") 
Out[9]: 'w\'o"w'

为什么双引号没有转义?无论有没有转义,它都做同样的事情:

In [10]: print ( 'w\'o"w') 
w'o"w

In [11]: print ( 'w\'o\"w')
w'o"w

而在下面两种情况下是无法逃脱的:

In [12]: str( """w'o'w""")
Out[12]: "w'o'w"

In [13]: str( """w"o"w""")
Out[13]: 'w"o"w'

但它们仍然等同于它们的转义版本:

In [14]: str("w\'o\'w")
Out[14]: "w'o'w"

In [15]: str( "w\"o\"w")
Out[15]: 'w"o"w'

有人可以向我解释为什么 Python 有这种“不一致”吗?拥有它们有什么好处?

最佳答案

当 Python 控制台(包括 IPython)显示字符串的值时,它通过打印字符串的 repr() 来实现。 repr() 将产生可由 Python 解析器解析的输出,因此它会在必要时包含反斜杠转义符。 (并且仅在必要时)。如果字符串中的所有引号都是单引号,repr() 将向您显示带有双引号的字符串,不需要反斜杠。如果字符串中的所有引号都是双引号,repr() 将向您显示带有单引号的字符串,不需要反斜杠。如果字符串包含混合的单引号和双引号,则需要反斜杠。

至于 print() 调用发生了什么——它们没有打印字符串的 repr(),它们显示的是 str() 该字符串的值,它是字符串本身,没有添加反斜杠转义(并且没有引号)。

下面是您的每个示例中发生的事情:

In [9]: str( """w'o"w""") 
Out[9]: 'w\'o"w'

您正在获取字符串 w'o"w 的值,IPython 在输出中显示 value。因此它调用 repr() 在值上,将引号括起来并在其中加上反斜杠。

In [10]: print ( 'w\'o"w') 
w'o"w

您正在打印字符串w'o"w,但没有得到它的值。所以 IPython 正在显示打印的字符串。注意没有 Out[10 ] -- print() 函数返回 None,当输出值是 None 时,IPython 会抑制输出值。

In [11]: print ( 'w\'o\"w') 
w'o"w

同样的事情:您正在打印 字符串,而不是 IPython 向您显示值。所以它使用 str(),而不是 repr()

In [12]: str( """w'o'w""")
Out[12]: "w'o'w"

此处显示的是字符串的值,因此它被引号括起来。但没有反斜杠,因为不需要它们来表示字符串。

In [13]: str( """w"o"w""")
Out[13]: 'w"o"w'

此处同上:没有反斜杠,因为不需要它们来表示字符串。

In [14]: str("w\'o\'w")
Out[14]: "w'o'w"

此处同上:repr() 输出中没有反斜杠,因为不需要它们来表示字符串。

In [15]: str( "w\"o\"w") 
Out[15]: 'w"o"w'

这里也一样:repr() 输出中没有反斜杠,因为不需要它们来表示字符串。

我希望这可以帮助您更好地了解正在发生的事情。

关于python - 字符串转义字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24236367/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com