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

标签 python

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/

相关文章:

python - 在数据框中动态拆分行

python - 如何使用 VS Code 调试 Django 自定义管理命令

javascript - 在使用 python 请求抓取之前等待网页完全加载

python - 找不到 CV2 模块 -- 在 openCV 构建中找不到 PythonLibs?

python - 在 Python 中将 unix 时间戳(长度 13)字符串转换为可读日期

python - 在找到的边界python opencv中提取内容?

python - 使用 SWIG 绑定(bind) Python/C++ 模板

python - 如何在 Python 中判断我是否在 Beowulf 集群上运行?

python - django - 匹配 url 安全 base64 字符串的 url 模式

python - 如何在 Django 调试工具栏中使用日志记录?