4
print "%r"

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

上記の 2 行のコードを Python で比較したいと思います。後者のステートメントでは、印刷する引数が不足しているというエラーが発生しますが、最初のケースでは引数がありませんが、それでも機能します。どんな助けでも大歓迎です。

4

5 に答える 5

12

文字列の% 内側は、文字列の外側で%printf のような演算子を使用していることを Python が確立した場合にのみ機能します。

最初のケースでは、そうではないので、文句を言いません。その場合に行っているのは、文字列を印刷することだけです。

2 番目のケースで、演算子を使用している%ため、十分な引数が提供されていないと文句を言います。その場合、印刷する前に文字列をフォーマットしています。

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は文字列であることに注意してください。Python インタープリターは、printが呼び出される前に文字列の書式設定を評価します。

@paxdiablo が言うように、%r書式指定子に引数を指定しないと、Python は文字列をそのまま必要と見なし、文句を言いません。

于 2013-08-16T08:59:10.427 に答える
3

print "%r"文字列を出力するだけ%rです。

print "%r %r" % ("hello"). %文字列の後はフォーマット演算子%r %rと呼ばれ、そのため、ここに特別な意味があります。それは、その場所に配置したいもののプレースホルダーです。%r

文字列には 2つ%rの文字列があります。そこに配置する文字列は 2 つ必要です。

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

文字列のフォーマットに関するドキュメントも参照してください。

于 2013-08-16T08:54:37.087 に答える
0

2 行目は 2 つの引数を要求します。2 つの "%r" があるため、次のように括弧内に 2 つの引数が必要です。

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

ドキュメントを参照してください。

于 2013-08-16T08:54:20.443 に答える