我正在阅读python书中的练习,我对此代码中发生的事情感到有些困惑。
formatter = "%r %r %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."
)
作者没有解释什么" formatter"正在做每个"打印"。如果我删除它们,所有内容都会完全相同。我在这里错过了什么吗?
答案 0 :(得分:2)
不,它没有打印出完全相同的东西。如果您使用formatter %
部分,则没有逗号,也没有括号。
如果你扩展格式化程序,那就更清楚了。我建议你使用:
formatter = "One: %r, Two: %r, Three: %r, Four: %r"
代替。
格式化程序充当模板,每个%r
充当右侧元组中值的占位符。
答案 1 :(得分:2)
formatter
是一个字符串。所以,第一行与:
"%r %r %r %r" % (1, 2, 3, 4)
在右边的元组中的每个项目上调用repr
,并用结果替换相应的%r
。当然,它对
formatter % ("one", "two", "three", "four")
等等。
请注意,您通常也会看到:
"%s %s %s %s" % (1, 2, 3, 4)
调用str
而不是repr
。 (在您的示例中,我认为str
和repr
为所有这些对象返回相同的内容,因此如果您将formatter
更改为使用{{1},则输出将完全相同而不是%s
)
答案 2 :(得分:2)
这是字符串格式的经典格式,print "%r" % var
将打印var的原始值,4%r期望在%之后传递4个变量。
更好的例子是:
formatter = "first var is %r, second is %r, third is %r and last is %r"
print formatter % (var1, var2, var3, var4)
使用格式化程序变量只是为了避免在打印中使用长行,但通常不需要这样做。
print "my name is %s" % name
print "the item %i is $%.2f" % (itemid, price)
%.2f
在逗号后浮动,带有2个值。
您可能希望尝试更新的字符串格式:(如果您使用的是至少2.6)
print "my name is {name} I'm a {profession}".format(name="sherlock holmes", profession="detective")
更多信息:
http://www.python.org/dev/peps/pep-3101/
http://pythonadventures.wordpress.com/2011/04/04/new-string-formatting-syntax/