转义在Python Shell中的工作方式是否有所不同? (与文件中的代码相比)

时间:2019-06-18 14:09:10

标签: python escaping

在Python 3.7 shell中,当转义字符串时,会得到一些意外的结果,请参见下面的示例。在python 2.7 shell中获得了相同的结果。

Python文档中的快速阅读似乎表明转义可以在字符串中完成,但似乎并未说它不能在shell中使用。 (或者我错过了)。

有人可以解释为什么转义似乎没有按预期进行吗

示例一:

输入: >>> "I am 6'2\" tall"

输出:
'I am 6\'2" tall'

>>> print("I am 6'2\" tall")

期间

返回(我所期望的):
I am 6'2" tall

(我也想知道反斜杠在意外结果中如何最终落在6号后面?)

另一个示例:

输入: >>> "\tI'm tabbed in."

输出: "\tI'm tabbed in."

在print()内部时,该选项卡将替换为适当的选项卡。 (无法显示,因为stackoverflow似乎删除了我在代码块内使用的行前面的制表符/空格)。

2 个答案:

答案 0 :(得分:2)

交互式外壳将为您提供上一个命令的返回值的表示形式。它使用repr()方法为您提供该值,该方法试图给出该值的有效源代码表示;也就是说,您可以按原样复制并粘贴到代码中。

另一方面,

print会将字符串的内容打印到控制台,而不管它是否是有效的源代码。

答案 1 :(得分:2)

基本上,当您在终端中直接输入字符串时,终端会调用字符串的 repr 魔术方法。在您通过字符串调用print的同时,它还会在其上调用__str__方法:

s = "I am 6'2\" tall"
s.__repr__() 
'\'I am 6\\\'2" tall\''
s.__str__()
'I am 6\'2" tall'

详细了解这两种方法之间的比较:str vs. repr 和那个SO Difference between __str__ and __repr__?问题。

在未来的python冒险中万事如意。