Skip to main content
 首页 » 编程设计

python之为什么这两个使用 %r 的输出之间的区别是 python 中的单引号和双引号

2025年05月04日15www_RR

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 是预期的保持真实。