当我运行此代码时
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时添加('')的原因。 我不明白的是为什么只有前两个没有单引号而不是全部?这条线是如何短暂执行的?
答案 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()
输出的两倍,这些不同