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.'.
现在我想知道为什么这两个版画的区别是双引号和单引号? 谢谢你的帮助。
答案 0 :(得分:6)
%r
格式会导致Python使用repr
函数进行打印。所以以下是等价的:
"%r" % my_string ≡ "%s" % repr(my_string)
那么问题就变成了,为什么repr
有时会使用单引号,有时会使用双引号?好吧,首先,repr
的目标是生成一个Python对象的表示,它也是有效的Python源代码(这不是强制性要求,但对于许多Python类型,它确实是有效)。对于包含撇号的字符串,有多种方式来表示它:
"Don't" ≡ 'Don\'t'
repr
决定“聪明”并选择一个更易于阅读的内容,即使用双引号,只要它不包含双引号即可。在所有其他情况下,Python回退到默认的单引号。这就是为什么你会看到不同字符串的不同行为。
更相关的是,不要依赖repr
(或%r
)引用供人类消费的字符串,为此编写自己的函数。它并不意味着,它主要用作调试时转储Python对象的便捷方式。
AFAIK没有明确规定当你repr
字符串时你会得到什么的文件,除了预期eval(repr(my_string)) == my_string
成立。
答案 1 :(得分:0)
因为如果don't
使用单引号,如果字符串包含单引号,则python automaticaly将其放在双引号"
中。否则它将字符串放在单引号中。
>>> x
'There are binary types of people.'
>>> y
"Those who know binary and those who don't."
注意:您不能在单引号中添加包含单引号的字符串,它会引发syntax error
:
>>> 'Those who know binary and those who don't.'
File "<stdin>", line 1
'Those who know binary and those who don't.'
^
SyntaxError: invalid syntax
和%r
使用repr()转换任何Python对象(返回包含对象的可打印表示的字符串。)。
这与转化(反向引号)产生的值相同。能够以普通函数的形式访问此操作有时很有用。对于许多类型,此函数尝试返回一个字符串,该字符串在传递给eval()时会产生具有相同值的对象,否则表示形式是一个用尖括号括起来的字符串,它包含对象类型的名称附加信息通常包括对象的名称和地址。类可以通过定义__repr__()方法来控制此函数为其实例返回的内容。
>>> repr("example")
"'example'"
>>> repr("exampl'e")
'"exampl\'e"'
答案 2 :(得分:0)
那么让我举个例子
print "Let's try this example"
以下示例将打印正常但如果您使用单引号,它将在let的'之后退出。
这是另一个例子
print 'He said "Hello!"'
如果你在这里使用双引号,那么它将在 Hello!之前转义。这些是简单的用例。如果您使用的输出html标签需要单引号或双引号,它们会派上用场。