我理解repr
的目标是明确的,但repr
的行为确实让我感到困惑。
repr('"1"')
Out[84]: '\'"1"\''
repr("'1'")
Out[85]: '"\'1\'"'
根据上面的代码,我认为repr
只是将''
放在字符串周围。
但是当我尝试这个时:
repr('1')
Out[82]: "'1'"
repr("1")
Out[83]: "'1'"
repr
将""
放在字符串周围,而repr("1")
和repr('1')
是相同的。
为什么?
答案 0 :(得分:0)
此处有三个级别的报价!
您传递的字符串中的引号(仅在您的第一个示例中出现)。
repr
生成的字符串中的引号。请记住,repr
尝试返回一个可用作Python代码的字符串表示形式,因此如果您传递一个字符串,它将在字符串周围添加引号。
Python解释器在打印输出时添加的引号。这些可能会让你感到困惑。可能您的解释器再次调用repr
,以便让您了解要返回的对象的类型。否则,字符串1
和数字1
看起来完全相同。
要摆脱这种额外的引用级别,以便您可以看到repr
生成的确切字符串,请改用print(repr(...))
。
答案 1 :(得分:0)
python REPL(在你的情况下是Ipython)打印出输出值的repr()
,因此你的输入正在repr
两次。
为避免这种情况,请改为打印出来。
>>> repr('1') # what you're doing
"'1'"
>>> print(repr('1')) # if you print it out
'1'
>>> print(repr(repr('1'))) # what really happens in the first line
"'1'"
原始(外部)引号可能无法保留,因为repr
编辑的对象不知道它们原来是什么。
答案 2 :(得分:0)
repr(object):返回一个包含可打印表示形式的字符串 一个对象。
因此它返回一个给Python的字符串,可用于重新创建该对象。
你的第一个例子:
repr('"1"') # string <"1"> passed as an argument Out[84]: '\'"1"\'' # to create your string you need to type like '"1"'. # Outer quotes are just interpretator formatting
你的第二个例子:
repr("'1'") # you pass a string <'1'> Out[85]: '"\'1\'"' # to recreate it you have to type "'1'" or '\'1\'', # depending on types of quotes you use (<'> and <"> are the same in python
最后,
repr('1') # you pass <1> as a string Out[82]: "'1'" # to make that string in python you type '1', right? repr("1") # you pass the same <1> as string Out[83]: "'1'" # to recreate it you can type either '1' or "1", does not matter. Hence the output.
我同时翻译并repr
将引号设置为'
或"
,具体取决于内容,以尽量减少转义,这就是输出不同的原因。