/ /出力「でも歌わなかった」[完了] - python

出力 "しかし、それは歌っていませんでした。" [閉じた] - python

formatter = "%r %r %r %r"
print formatter % (1, 2, 3, 4)
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."
)

このプログラムでは、間違いはありませんが、質問します。出力の最後の行では、個々の部分に一重引用符と二重引用符の両方が使用されています。それはなぜだと思いますか?なぜ彼らはすべての文字列を二重引用符で囲まないのか

回答:

回答№1は2

Pythonオブジェクト(可能な場合)は、使用時にオブジェクトを正確に再構成するために使用できる方法で自分自身を表現しようとします。 repr。フォーマット文字列は %r のではなく、 %s、あなたは "文字列を求めている" repr それの代わりに str 表現。一重引用符が含まれている文字列には、有効な選択肢がいくつかあります repr 表現...私の頭の上にいくつかあります:

"foo"bar"
"foo"bar"
"""foo"bar"""
"""foo"bar"""

これらの選択肢のうち、最初のバージョンが最もよく見えますので、「彼らが使用することを選択したものです。二重引用符を使用しない理由を尋ねることができます すべて 文字列ですが、もちろん二重引用符を含む文字列についても同じ問題があります。


回答№2については2

それは "重複していて、文字列の生の表現を使っているからです" それでは見てみましょう

この文のために "I had this thing." stringの中に一重/二重引用符がないので、出力は一重引用符または二重引用符で囲まれます。二重引用符で囲まれた出力を含む唯一の文字列は、 "But it didn"t sing." それは既にその中に一重引用符を含んでいるからです:)

もしあなたが%sを使っていたら、引用符なしの文字列だけが見えるでしょう:)