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")
ドキュメントを参照してください。