Python 争论不够?

Python 争论不够?,python,Python,vs 我想比较一下python中的以上两行代码。后一条语句给出了一个错误,没有足够的参数来打印,但在第一种情况下,我们没有参数,但仍然可以工作。有人能向编程新手解释一下吗。 任何帮助都将不胜感激。字符串内部的%只有在Python确定您正在使用字符串外部的%printf-like运算符时才会起作用 在第一种情况下,你不是,所以它不会抱怨。在这种情况下,你要做的就是打印一个字符串 第二种情况是,您正在使用%运算符,因此它会抱怨您没有提供足够的参数。在这种情况下,您将在打印字符串之前对其进行格式化 p

vs

我想比较一下python中的以上两行代码。后一条语句给出了一个错误,没有足够的参数来打印,但在第一种情况下,我们没有参数,但仍然可以工作。有人能向编程新手解释一下吗。 任何帮助都将不胜感激。

字符串内部的
%
只有在Python确定您正在使用字符串外部的
%
printf-like运算符时才会起作用

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

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

print
本身对字符串格式化功能一无所知,它只打印您给它的内容。在字符串格式的情况下,
%
操作符处理类似于
“Hello,%s”(“Pax”)
的内容,为您提供
“Hello,Pax”
,然后将其提供给
打印
,以便输出:

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

参数计数不匹配也没有问题,打印文本
%r%r%r%r
第二行需要两个参数-有两个“%r”,因此括号中需要两个参数,如下所示:

print "%r %r %r %r %r"
请参阅。

打印“%r”
仅打印字符串
%r

打印“%r%r”(“你好”)
%
字符串
%r%r
后的字符串被称为格式化运算符,因此,
%r
在这里有一个特殊的含义-它是要放在其位置上的东西的占位符

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

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

另请参阅上的文档。

您没有阅读错误消息:

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

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


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

看看@paxdiablo-answer,
打印“%r%r”
也可以正常工作。事实上,我将投票重新打开它。除了一个类似的题目,这个问题本身根本不可能是重复的。另一个是关于特定代码位失败的原因,这一个是关于非%-运算符打印不会出现参数计数问题的原因。注意:如果您使用的是printf样式的处理,并且实际上想要打印一个文本
%%
字符,则需要编写
%%
。这很难回答OP的问题。
print "%r %r" % ("hello", "world")
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"