4
print "%r"

对比

print "%r %r"%("hello")

我想在python中比较上面的两行代码。后一个语句给出了一个错误,没有足够的论据来打印,但在第一种情况下,我们没有论据,但它仍然有效。任何人都可以向刚接触编程的人解释一下。任何帮助将不胜感激。

4

5 回答 5

12

字符串内部只有% 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.

于 2013-08-16T08:53:18.717 回答
3

print "%r"只打印字符串%r

print "%r %r" % ("hello"). %在字符串%r %r被称为格式化操作符之后,因为它,%r这里有一个特殊的含义——它是你想要放置的东西的占位符。

你有两个%r字符串 - 你应该有两个字符串放在那里:

print "%r %r" % ("hello", "world")

另请参阅有关字符串格式的文档。

于 2013-08-16T08:54:37.087 回答
3

您没有阅读错误消息:

>>> 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"
于 2013-08-16T08:58:00.527 回答
3

值得注意的是,print在所有情况下,您给出的唯一参数是字符串。Python 解释器在print调用之前评估任何字符串格式。

正如@paxdiablo 所说,当您不向%r格式说明符提供任何参数时,Python 会假定您希望字符串保持原样,并且不会抱怨。

于 2013-08-16T08:59:10.427 回答
0

第二行需要两个参数 - 有两个“%r”,因此括号中需要两个参数,如下所示:

print "%r %r" % ("hello", "world")

请参阅文档

于 2013-08-16T08:54:20.443 回答