print "%r"
vs
print "%r %r"%("hello")
我想比较python中的上面两行代码。后面的语句给出了一个错误,没有足够的争论打印但是在第一种情况下我们没有争论但仍然有效。任何人都可以向新手解释这个节目。 任何帮助将不胜感激。
答案 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)