[解決済み] 文字列フォーマット:% vs. .format vs. f-stringリテラル
質問
Python 2.6では
str.format()
メソッドの構文が、既存の
%
演算子を使用します。どちらが良いのか、またどのような場面で使うのか?
Python 3.6 では、文字列リテラル (別名 "f" 文字列) の文字列フォーマットとして、もうひとつ
f"my string"
. このフォーマットオプションは他のものより優れているのでしょうか?
-
以下はそれぞれの方法を使い、同じ結果になっていますが、何が違うのでしょうか?
#!/usr/bin/python sub1 = "python string!" sub2 = "an arg" sub_a = "i am a %s" % sub1 sub_b = "i am a {0}".format(sub1) sub_c = f"i am a {sub1}" arg_a = "with %(kwarg)s!" % {'kwarg':sub2} arg_b = "with {kwarg}!".format(kwarg=sub2) arg_c = f"with {sub2}!" print(sub_a) # "i am a python string!" print(sub_b) # "i am a python string!" print(sub_c) # "i am a python string!" print(arg_a) # "with an arg!" print(arg_b) # "with an arg!" print(arg_c) # "with an arg!"
-
さらに、Pythonで文字列のフォーマットが発生するのはどのような場合ですか?例えば、ロギングレベルがHIGHに設定されている場合、次のように実行してもヒットするでしょうか?
%
の操作が必要ですか?また、その場合、これを回避する方法はあるのでしょうか?log.debug("some debug info: %s" % some_info)
解決方法は?
最初の質問に答えると...
.format
は、多くの点でより洗練されているように見えます。厄介なのは
%
は、変数かタプルのどちらかを取ることができることです。次のようにすれば必ずうまくいくと思うでしょう。
"hi there %s" % name
それでも
name
がたまたま
(1, 2, 3)
を投げます。
TypeError
. 常に印刷されることを保証するには、次のようにします。
"hi there %s" % (name,) # supply the single argument as a single-item tuple
というのは醜いだけです。
.format
には、そのような問題はありません。また、あなたが挙げた2つ目の例では
.format
の例の方が、見た目がずっときれいです。
なぜ使わないのですか?
- 知らない(これを読む前の私)
- Python 2.5と互換性があること
2番目の質問に答えると、文字列のフォーマットは他の操作と同時に行われます。Pythonは怠惰な言語ではないので、関数を呼び出す前に式を評価します。
log.debug
の例では、式
"some debug info: %s"%some_info
は、まず、例えば
"some debug info: roflcopters are active"
に渡され、その文字列は
log.debug()
.
関連
-
[解決済み】Python: SyntaxError: キーワードは式になり得ない
-
[解決済み] 文字列リテラルの前にある'b'文字は何を意味するのでしょうか?
-
[解決済み] Pythonには文字列の'contains'サブストリングメソッドがありますか?
-
[解決済み] バイトを文字列に変換する
-
[解決済み] 文字列をfloatやintにパースするにはどうしたらいいですか?
-
[解決済み] Pythonで文字列の部分文字列を取得するにはどうすればよいですか?
-
[解決済み] Pythonで文字列を小文字にするには?
-
[解決済み] モジュールの関数名(文字列)を使って、モジュールの関数を呼び出す。
-
[解決済み] どうすれば、文字列中のリテラルな中抜き文字を印刷し、また.formatを使用することができるのでしょうか?
-
[解決済み】文字列をdatetimeに変換する
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
ピローによる動的キャプチャ認識のためのPythonサンプルコード
-
Python 人工知能 人間学習 描画 機械学習モデル作成
-
Python jiabaライブラリの使用方法について説明
-
Pythonの@decoratorsについてまとめてみました。
-
[解決済み】RuntimeWarning: 割り算で無効な値が発生しました。
-
[解決済み】TypeErrorの修正方法。Unicodeオブジェクトは、ハッシュ化する前にエンコードする必要がある?
-
[解決済み】OSError: [WinError 193] %1 は有効な Win32 アプリケーションではありません。
-
[解決済み] 'DataFrame' オブジェクトに 'sort' 属性がない
-
[解決済み] 'int'オブジェクトに'__getitem__'属性がない。
-
[解決済み】LogisticRegression: Pythonでsklearnを使用して、未知のラベルタイプ: '連続'を使用しています。