Pythonのいくつかの文字列の書式設定方法とその比較を分析します。


スタートをきる
Pythonでは、多くの文字列フォーマットの方式が提供されています。それぞれ%-formating、str.format、f-stringです。ここではこれらの書式設定方法を比較します。
%-フォーマット
このフォーマットはC言語スタイルのsprintf形式から来ています。

name = "weapon"
"Hello, %s." % name
C言語の本当の風格に深く心を奪われて、%を通じて(通って)地位を占めます。
どうして%1-formatingがよくないですか?
悪いところは、文字列が長いか多いパラメータでは、可読性が悪くなるということです。
str.formatフォーマット
PEP-311はstr.formatを持ってきました。%-formatingの改善です。これは正常な関数を使って文法を呼び出し、文字列に変換するオブジェクトの__u u u u u u uformat()方法を拡張します。

"Hello, {}. You are {}.".format(name, age)
辞書形式での参照をサポートします。位置パラメータによるトラブルを避けることができます。

"Hello, {name}. You are {age}.".format(name=name, age=age)
この二つの方法はコード効果が同じであるが、第一の方法は着信パラメータ位置を厳格に制御する必要があり、第二の方法はこのような制限がなく、コードの読み取り可能性を増加させる。各種テクニックはFormat Specification Mini-Leanggeを見ることができます。
なぜstr.formatがよくないですか?
文字列が長い場合の可読性を解決しましたが、基本的には変数名を書き換える必要があります。エレガントではありません。
f-stringフォーマット
PEP-00498はf-string方式を持ってきました。Python 3.6からサポートします。このような方法も_u u u_u uを使用しています。フォーマットプロトコルをフォーマットします。

name = "Eric"
age = 74
f"Hello, {name}. You are {age}."
文法的にはstr.format()と似ていますが、より簡潔で、文字列が長いときも煩雑ではありません。より強力なのは、任意の表現をサポートします。かっこ内で四則演算や関数呼び出しなどができます。f"{2 * 6}" またはf"{name.lower()} is funny"
そして性能も最高です。
いくつかのフォーマット方式の性能比較

import timeit
def add():
  status = 200
  body = 'hello world'
  return 'Status: ' + str(status) + '\r
' + body + '\r
' def old_style(): status = 200 body = 'hello world' return 'Status: %s\r
%s\r
' % (status, body) def formatter1(): status = 200 body = 'hello world' return 'Status: {}\r
{}\r
'.format(status, body) def formatter2(): status = 200 body = 'hello world' return 'Status: {status}\r
{body}\r
'.format(status=status, body=body) def f_string(): status = 200 body = 'hello world' return f'Status: {status}\r
{body}\r
' perf_dict = { 'add': min(timeit.repeat(lambda: add())), 'old_style': min(timeit.repeat(lambda: old_style())), 'formatter1': min(timeit.repeat(lambda: formatter1())), 'formatter2': min(timeit.repeat(lambda: formatter2())), 'f_string': min(timeit.repeat(lambda: f_string())), } print(perf_dict)
結果:

{
  'add': 0.8815229000000002, 
  'old_style': 0.6351808999999999, 
  'formatter1': 0.7536176999999995, 
  'formatter2': 1.2277180999999997, 
  'f_string': 0.4891379000000011
}
f-stringフォーマットの方式の性能は最も良いです。
なぜf-stringのスピードがこんなに速いですか?
命令から見ると、f'Status: {status}\r
{body}\r
'
は次のように翻訳されています。

 8 LOAD_CONST        3 ('Status: ')
10 LOAD_FAST        0 (status)
12 FORMAT_VALUE       0
14 LOAD_CONST        4 ('\r
') 16 LOAD_FAST 1 (body) 18 FORMAT_VALUE 0 20 LOAD_CONST 4 ('\r
') 22 BUILD_STRING 5
命令に示されているように、f-stringは実行時にレンダリングされています。下の部分は「Sttus:」+status+「\r」+body+「r」のような形に中継されています。PEP-00498で述べたように、
F-strigs provide a way to embed expressitions inside string lighterals、using a minimal sysntax.It shound be noted that and ft-string is really an evalution aut time、not a constant valute.In firextrace'string、string-stress。which contains expressitions inside braaces.The expressions are replacced with their values.
他の方法では、まず文字列定数値を作成してから、置換などを行います。
締め括りをつける
以前の方式でフォーマットしてもいいですが、ここではf-string方式を勧めます。もっと簡潔で、読みやすくて、もっと便利です。性能もいいし、断わる理由もないです。
今日からf-stringを使います。
以上は小编で绍介したPythonの中のいくつかの文字列のフォーマットの方法と比较して、みんなに助けがあることを望んで、もし皆さんは何か疑问があれば、メッセージを歓迎してください。