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
是预期的保持真实。
关于python - 为什么这两个使用 %r 的输出之间的区别是 python 中的单引号和双引号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27692204/