Python 3.6の機能の1つは、フォーマットされた文字列です。
このSO質問 (python-3.6では「f」プレフィックスが付いた文字列)は、フォーマットされた文字列リテラルの内部について質問していますが、正確な使用法がわかりませんフォーマットされた文字列リテラルの場合。どのような状況でこの機能を使用する必要がありますか?明示的は暗黙的よりも優れていますか?
単純な方が複雑よりも優れています。
これで、文字列がフォーマットされました。これにより、コードを明示的に保ちながら(他の文字列フォーマットメカニズムと比較して)、文字列フォーマットが簡単になります。
title = 'Mr.'
name = 'Tom'
count = 3
# This is explicit but complex
print('Hello {title} {name}! You have {count} messages.'.format(title=title, name=name, count=count))
# This is simple but implicit
print('Hello %s %s! You have %d messages.' % (title, name, count))
# This is both explicit and simple. PERFECT!
print(f'Hello {title} {name}! You have {count} messages.')
単純な文字列フォーマットのためにstr.format
を置き換えるように設計されています。
長所:Fリテラルの方がパフォーマンスが優れています(以下を参照)
短所:F-literalは3.6の新機能です。
In [1]: title = 'Mr.'
...: name = 'Tom'
...: count = 3
...:
...:
In [2]: %timeit 'Hello {title} {name}! You have {count} messages.'.format(title=title, name=name, count=count)
330 ns ± 1.08 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
In [3]: %timeit 'Hello %s %s! You have %d messages.'%(title, name, count)
417 ns ± 1.76 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
In [4]: %timeit f'Hello {title} {name}! You have {count} messages.'
13 ns ± 0.0163 ns per loop (mean ± std. dev. of 7 runs, 100000000 loops each)
文字列フォーマットの4つの方法すべてのパフォーマンスの比較
_title = 'Mr.' name = 'Tom' count = 3
_
%timeit 'Hello {title} {name}! You have {count} messages.'.format(title=title, name=name, count=count)
ループあたり198ns±7.88ns(7回の実行の平均±標準偏差、各1000000ループ)
%timeit 'Hello {} {}! You have {} messages.'.format(title, name, count)
ループあたり329ns±7.04ns(7回の実行の平均±標準偏差、各1000000ループ)
%timeit 'Hello %s %s! You have %d messages.'%(title, name, count)
ループあたり264ns±6.95ns(7回の実行の平均±標準偏差、各1000000ループ)
_%timeit f'Hello {title} {name}! You have {count} messages.'
_
ループあたり12.1ns±0.0936ns(7回の実行の平均±標準偏差、各100000000ループ)
したがって、文字列フォーマットの最新の方法はpython3.6からのものであり、これも最速です。