web-dev-qa-db-ja.com

Python 3.6のフォーマットされた文字列リテラルは何ですか?

Python 3.6の機能の1つは、フォーマットされた文字列です。

このSO質問 (python-3.6では「f」プレフィックスが付いた文字列)は、フォーマットされた文字列リテラルの内部について質問していますが、正確な使用法がわかりませんフォーマットされた文字列リテラルの場合。どのような状況でこの機能を使用する必要がありますか?明示的は暗黙的よりも優れていますか?

18
Günther Jena

単純な方が複雑よりも優れています。

これで、文字列がフォーマットされました。これにより、コードを明示的に保ちながら(他の文字列フォーマットメカニズムと比較して)、文字列フォーマットが簡単になります。

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を置き換えるように設計されています。

29
xmcp

長所: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)
3
zhengcao

文字列フォーマットの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からのものであり、これも最速です。

1
Harshit