没有足够的论据?

时间:2013-08-16 08:50:29

标签: python

print "%r"

vs

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

我想比较python中的上面两行代码。后面的语句给出了一个错误,没有足够的争论打印但是在第一种情况下我们没有争论但仍然有效。任何人都可以向新手解释这个节目。 任何帮助将不胜感激。

5 个答案:

答案 0 :(得分:12)

字符串中的% 只有在Python确定您正在使用%类似printf的运算符 之后才能发挥作用字符串。

在第一种情况下,你不是,所以它不会抱怨。在这种情况下你所做的就是打印一个字符串。

第二种情况, 使用%运算符,因此它抱怨您没有提供足够的参数。在这种情况下,您在打印字符串之前格式化字符串。

print本身对字符串格式化功能一无所知,只是打印出你给它的内容。在字符串格式化案例中,"Hello, %s"%("Pax")运算符处理类似%的内容,为您提供"Hello, Pax",然后将print提供给输出:

print "Hello, %s"%("Pax")
# ^   \_________________/ <- This bit done first
# |
# Then the print is done

基本上,% 运算符决定你正在进行printf式处理,你有一个包含{{的字符串的事实1}}角色。事实证明了这一点:

%

也没有参数计数不匹配的问题,打印出文字print "%r %r %r %r %r"

答案 1 :(得分:3)

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

print "%r %r" % ("hello")。字符串%之后的%r %r被称为格式化运算符,因此,%r具有特殊含义 - 它是您想要的东西的占位符穿上它的位置。

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

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

另见string formatting上的文档。

答案 2 :(得分: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

格式字符串没有足够的参数,而不是print。这显示了同样的问题:

>>> "%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"

答案 3 :(得分:3)

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

正如@paxdiablo所说,当你没有给%r格式说明符提供任何参数时,Python假设你想要字符串,并且不抱怨。

答案 4 :(得分:0)

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

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

请参阅documentation