print "%r"
对比
print "%r %r"%("hello")
我想在python中比较上面的两行代码。后一个语句给出了一个错误,没有足够的论据来打印,但在第一种情况下,我们没有论据,但它仍然有效。任何人都可以向刚接触编程的人解释一下。任何帮助将不胜感激。
print "%r"
对比
print "%r %r"%("hello")
我想在python中比较上面的两行代码。后一个语句给出了一个错误,没有足够的论据来打印,但在第一种情况下,我们没有论据,但它仍然有效。任何人都可以向刚接触编程的人解释一下。任何帮助将不胜感激。
字符串内部只有%
在Python 确定您在字符串外部%
使用类似 printf 的运算符后才会发挥作用。
在第一种情况下,你不是,所以它不会抱怨。在这种情况下,您所做的只是打印一个字符串。
第二种情况,您正在使用%
运算符,因此它抱怨您没有提供足够的参数。在这种情况下,您将在打印字符串之前对其进行格式化。
print
它本身对字符串格式化函数一无所知,它只是打印你给它的东西。在字符串格式化的情况下,运算符"Hello, %s"%("Pax")
会处理类似的内容%
以提供给您"Hello, Pax"
,然后将其提供给print
输出:
print "Hello, %s"%("Pax")
# ^ \_________________/ <- This bit done first
# |
# Then the print is done
所以基本上,是%
操作员决定你正在做 printf 风格的处理,而不是你有一个包含%
字符的字符串这一事实。事实证实了这一点:
print "%r %r %r %r %r"
参数计数不匹配也没有问题,打印出文字%r %r %r %r %r
.
print "%r"
只打印字符串%r
。
print "%r %r" % ("hello")
. %
在字符串%r %r
被称为格式化操作符之后,因为它,%r
这里有一个特殊的含义——它是你想要放置的东西的占位符。
你有两个%r
字符串 - 你应该有两个字符串放在那里:
print "%r %r" % ("hello", "world")
另请参阅有关字符串格式的文档。
您没有阅读错误消息:
>>> print "%r %r"%("hello")
Traceback (most recent call last):
File "<pyshell>", line 1, in <module>
print "%r %r"%("hello")
TypeError: not enough arguments for format string
这是没有足够参数的格式字符串,而不是打印。这显示了同样的问题:
>>> "%r %r"%("hello")
Traceback (most recent call last):
File "<pyshell>", line 1, in <module>
"%r %r"%("hello")
TypeError: not enough arguments for format string
而这有效:
>>> "%r %r"%("hello", "world")
"hello world"
值得注意的是,print
在所有情况下,您给出的唯一参数是字符串。Python 解释器在print
调用之前评估任何字符串格式。
正如@paxdiablo 所说,当您不向%r
格式说明符提供任何参数时,Python 会假定您希望字符串保持原样,并且不会抱怨。