binary = "binary"
do_not = "don't"
x = "There are %s types of people." % binary
y = "Those who know %s and those who %s." % (binary, do_not)
print "I also said: %r." % y
print "I also said: %r." % x
这是学习 Python 的练习。我在这里尝试理解 '%r' 所以我尝试了上面的两个打印。输出是
I also asid: "Those who know binary and those who don't.".
I also said: 'There are binary types of people.'.
现在我想知道为什么这两个打印品之间的区别是双引号和单引号? 感谢您的帮助。
请您参考如下方法:
%r 格式导致 Python 使用 repr 函数进行打印。所以以下是等价的:
"%r" % my_string ≡ "%s" % repr(my_string)
那么问题就来了,为什么repr有时候用单引号,有时候用双引号呢?好吧,首先,repr 的目标是生成一个 Python 对象的表示,它也是有效的 Python 源代码(这不是强制性要求,但对于许多 Python类型它确实有效)。对于其中包含撇号的字符串,有多种表示方式:
"Don't" ≡ 'Don\'t'
repr 决定“聪明”一点,选择更容易阅读的,即使用双引号,只要它还没有包含双引号。在所有其他情况下,Python 回退到默认的单引号。这就是为什么您会看到不同字符串的不同行为。
更相关的是,不要依赖repr(或%r)来引用字符串以供人类使用,编写您自己的函数那。这并不是为了那个目的,它主要用作调试时转储 Python 对象的便捷方式。
据我所知,没有文档明确规定当你repr 一个字符串时你会得到什么,除了 eval(repr(my_string)) == my_string 是预期的保持真实。
