Pythonのいくつかの文字列の書式設定方法とその比較を分析します。
スタートをきる
Pythonでは、多くの文字列フォーマットの方式が提供されています。それぞれ%-formating、str.format、f-stringです。ここではこれらの書式設定方法を比較します。
%-フォーマット
このフォーマットはC言語スタイルのsprintf形式から来ています。
どうして%1-formatingがよくないですか?
悪いところは、文字列が長いか多いパラメータでは、可読性が悪くなるということです。
str.formatフォーマット
PEP-311はstr.formatを持ってきました。%-formatingの改善です。これは正常な関数を使って文法を呼び出し、文字列に変換するオブジェクトの__u u u u u u uformat()方法を拡張します。
なぜstr.formatがよくないですか?
文字列が長い場合の可読性を解決しましたが、基本的には変数名を書き換える必要があります。エレガントではありません。
f-stringフォーマット
PEP-00498はf-string方式を持ってきました。Python 3.6からサポートします。このような方法も_u u u_u uを使用しています。フォーマットプロトコルをフォーマットします。
そして性能も最高です。
いくつかのフォーマット方式の性能比較
なぜf-stringのスピードがこんなに速いですか?
命令から見ると、
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の中のいくつかの文字列のフォーマットの方法と比较して、みんなに助けがあることを望んで、もし皆さんは何か疑问があれば、メッセージを歓迎してください。
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の中のいくつかの文字列のフォーマットの方法と比较して、みんなに助けがあることを望んで、もし皆さんは何か疑问があれば、メッセージを歓迎してください。