1. ホーム
  2. python

[解決済み] f'{{74}}'はなぜf-Stringのf'{{74}}と同じなのですか?

2022-11-10 12:30:20

質問

f-文字列 は Python 3.6 から利用可能で、文字列の書式設定に非常に便利です。

>>> n='you'
>>> f'hello {n}, how are you?'
'hello you, how are you?'

で詳細を読む Python 3 の f-String。改良された文字列書式設定構文 (ガイド) . 面白いパターンが見つかりました。

三重の中括弧を使用すると、文字列には単一の中括弧しか含まれないことに注意してください。

>>> f"{{{74}}}"
'{74}'

ただし、3つ以上の中括弧を使用すると、より多くの中括弧を表示させることができます。

>>> f"{{{{74}}}}"
'{{74}}'

と、まさにこの通りです。

>>> f'{74}'
'74'

>>> f'{{74}}'
'{74}'

ここで、2つの { を三つに渡しても、結果は同じです。

>>> f'{{{74}}}'
'{74}'           # same as f'{{74}}' !

ということで、4つまで必要です ( {{{{ ) を出力する必要があります。

>>> f'{{{{74}}}}'
'{{74}}'

これはなぜでしょうか?Pythonがその瞬間から余分な1つを必要とするように、2つの中括弧で何が起こるのでしょうか?

どのように解決するのですか?

二重中括弧で中括弧をエスケープし、補間が起こらないようにします。 {{{ であり、かつ }}} . そして 74 は変更されていない文字列のままです。 '74' .

三重中括弧の場合、外側の二重中括弧はエスケープされ、上記と同じです。一方、内側の中括弧は、通常の文字列補間になり、値 74 .

つまり、文字列 f'{{{74}}}' と同じです。 f'{{ {74} }}' と同じですが、空白を除いたものです(同等に '{' + f'{74}' + '}' ).

数値定数を変数に置き換えると、その違いがわかります。

In [1]: x = 74

In [2]: f'{{x}}'
Out[2]: '{x}'

In [3]: f'{{{x}}}'
Out[3]: '{74}'