为什么python中的打印格式化程序在不完全相同时会有所不同?

时间:2017-02-20 22:32:59

标签: python python-2.7

当我运行此代码时

formatter = "%s %s %r %r"

print formatter % (1, 2, 3 , 4)
print formatter % ('one', 'two', 'three', 'four')
print formatter % (True, False, False, True)
print formatter % (formatter, formatter, formatter, formatter)
print formatter % (
   "I had this thing.",
   "That you could type up right.",
   "But it didn't sing.",
   "So I said goodnight."
)

此行的输出

print formatter % (formatter, formatter, formatter, formatter)

%s %s %r %r %s %s %r %r '%s %s %r %r' '%s %s %r %r'

现在我明白在python中我们使用%r作为调试原因,并为用户指定了%s的格式化程序,这就是为什么在使用%r时添加('')的原因。 我不明白的是为什么只有前两个没有单引号而不是全部?这条线是如何短暂执行的?

1 个答案:

答案 0 :(得分:1)

%s在对象上插入str()的结果,而%r在同一对象上获取repr()的输出。

对于字符串,repr()生成字符串文字语法

>>> s = 'foo bar'
>>> repr(s)
"'foo bar'"
>>> print(repr(s))
'foo bar'

那是因为对于Python内置对象,repr()通常会产生相同的语法,它将重新创建该值。对于整数或布尔值,str()repr()版本看起来恰好相同,因此您不会看到差异。

但是,当您将formatter(一个字符串)插入formatter本身时,您会得到str()输出的两倍,以及repr()输出的两倍,这些不同