print "%r"
対
print "%r %r"%("hello")
上記の 2 行のコードを Python で比較したいと思います。後者のステートメントでは、印刷する引数が不足しているというエラーが発生しますが、最初のケースでは引数がありませんが、それでも機能します。どんな助けでも大歓迎です。
print "%r"
対
print "%r %r"%("hello")
上記の 2 行のコードを Python で比較したいと思います。後者のステートメントでは、印刷する引数が不足しているというエラーが発生しますが、最初のケースでは引数がありませんが、それでも機能します。どんな助けでも大歓迎です。
文字列の%
内側は、文字列の外側で%
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
ます。
すべての場合に与えている唯一の引数print
は文字列であることに注意してください。Python インタープリターは、print
が呼び出される前に文字列の書式設定を評価します。
@paxdiablo が言うように、%r
書式指定子に引数を指定しないと、Python は文字列をそのまま必要と見なし、文句を言いません。
print "%r"
文字列を出力するだけ%r
です。
print "%r %r" % ("hello")
. %
文字列の後はフォーマット演算子%r %r
と呼ばれ、そのため、ここに特別な意味があります。それは、その場所に配置したいもののプレースホルダーです。%r
文字列には 2つ%r
の文字列があります。そこに配置する文字列は 2 つ必要です。
print "%r %r" % ("hello", "world")
文字列のフォーマットに関するドキュメントも参照してください。
2 行目は 2 つの引数を要求します。2 つの "%r" があるため、次のように括弧内に 2 つの引数が必要です。
print "%r %r" % ("hello", "world")
ドキュメントを参照してください。