3

私は python book で演習を行っていますが、このコードで何が起こっているのか少し戸惑っています。

formatter = "%r %r %r %r"

print formatter % (1, 2, 3, 4)
print formatter % ("one", "two", "three", "four")
print formatter % (True, False, False, True)
print formatter % (formatter, formatter, formatter, formatter)
print formatter % (
    "I had this thing.",
    "That you could type up right.",
    "But it didn't sing.",
    "So I said goodnight."
)

著者は、各「印刷」後に「フォーマッタ」が何をしているのかについて説明していません。それらを削除すると、すべてがまったく同じように出力されます。ここで何か不足していますか?

4

3 に答える 3

2

いいえ、まったく同じものを印刷するわけではありません。パーツを使用する場合、コンマや括弧はありませんformatter %

フォーマッターを展開すると、より明確になります。私はあなたが使用することをお勧めします:

formatter = "One: %r, Two: %r, Three: %r, Four: %r"

代わりは。

フォーマッターはテンプレートとして機能し、それぞれ%rが右側のタプルの値のプレースホルダーとして機能します。

于 2013-03-07T19:30:34.260 に答える
2

formatter文字列です。したがって、最初の行は次と同じです。

"%r %r %r %r" % (1, 2, 3, 4)

reprこれは、右側のタプル内の各アイテムを呼び出し、対応するアイテムを%r結果に置き換えます。もちろん、それはまったく同じことをします

formatter % ("one", "two", "three", "four")

なども同様です。

多くの場合、次のことも表示されることに注意してください。

"%s %s %s %s" % (1, 2, 3, 4)

strの代わりに呼び出しますrepr。(あなたの例では、これらすべてのオブジェクトに対して同じものを返すと思います。したがって、代わりにuseに変更した場合、出力はまったくstr同じになります)reprformatter%s%r

于 2013-03-07T19:31:15.523 に答える
2

これは、文字列フォーマットの古典的なフォーマットでprint "%r" % var、var の生の値を出力します。4 つの %r は、% の後に 4 つの変数が渡されることを期待しています。

より良い例は次のとおりです。

formatter = "first var is %r, second is %r, third is %r and last is %r"
print formatter % (var1, var2, var3, var4)

フォーマッタ変数を使用するのは、出力で長い行を使用しないようにするためだけですが、通常はその必要はありません。

print "my name is %s" % name
print "the item %i is $%.2f" % (itemid, price)

%.2fコンマの後に 2 つの値を持つ float です。

試してみたい文字列フォーマットの新しいバリアントがあります: (少なくとも 2.6 を使用している場合)

print "my name is {name} I'm a {profession}".format(name="sherlock holmes", profession="detective")

詳細:

http://www.python.org/dev/peps/pep-3101/

http://pythonadventures.wordpress.com/2011/04/04/new-string-formatting-syntax/

于 2013-03-07T19:39:48.057 に答える