新しい(そして素晴らしい)python 3リテラル文字列補間でいくつかの機能を試してみると、この奇妙な違いが見つかりました。
たとえば、古いを使用するstr.format
と、次のように動的な桁数で整数をフォーマットできます。
>>> d = 5
>>> N = 3
>>> '{:0{N}d}'.format(d, N=N)
'005'
しかし、リテラル文字列を使用して同等のものを試してみると、エラーが発生します。
>>> f'{:0{N}d}'
SyntaxError: f-string: empty expression not allowed
引数の順序を入れ替えるだけで、正しいフォーマットが得られます
>>> f'{d:0{N}}'
'005'
文字列を変更せずにf文字列にスワップできると思っていたので、これは奇妙なことに思いました。呼び出しだけです。
str.format
とf-stringの構文上の違いは何ですか?そして、なぜこの例はわずかに異なるのですか?
あなたは何をするのか誤解'{:0{N}d}'.format(d, N=N)
しました。d
フォーマットの仕様では、変数を参照していませんd
。これは、基数10の整数を出力することを意味します。Pythonは、そのフィールドをd
引数と位置的に一致させます。
f-stringでそれを試してみるとf'{:0{N}d}'
、、 f-stringsには位置引数がありません。Pythonは、そのフィールドのフォーマットを認識していません。元のバグを修正d
して前に配置し:
、Pythonがd
そこでフォーマットすることになっていることを認識できるようにする必要があります。
参考のために、との正しいバージョンがformat
あったであろう'{d:0{N}}'.format(d=d, N=N)
。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加