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 会假定您希望字符串保持原样,并且不会抱怨。