Neden f '{{{74}}}' f-Dizeleri ile f '{{74}}' ile aynı?


109

f-Dizeleri Python 3.6'dan edinilebilir ve dizeleri biçimlendirmek için çok kullanışlıdır:

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

Python 3'ün f-Dizeleri: Geliştirilmiş Dize Biçimlendirme Sözdizimi'nde (Kılavuz) daha fazla bilgi . İlginç bir model buldum:

Üçlü parantez kullanmanın, dizenizde yalnızca tek bir parantez olmasına neden olacağını unutmayın:

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

Ancak, üçlü ayraçlardan daha fazlasını kullanırsanız göstermek için daha fazla ayraç alabilirsiniz:

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

Ve bu tam olarak böyle:

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

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

Şimdi ikiden {üçe geçersek sonuç aynıdır:

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

Yani 4 taneye ihtiyacımız var! ( {{{{) çıktı olarak iki parantez almak için:

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

Bu neden? Python'un o andan itibaren ekstra bir tane almasını sağlamak için iki parantezle ne olur?


70
Çıkışlarını karşılaştırma aydınlatıcı olabilir f"{{2+2}}"ve f"{{{2+2}}}"vardır '{2+2}'ve '{4}'sırasıyla
Kevin

3
@Kevin harika biri. f'{2+2}'4 f'{{2+2}}'getirisi, 2 + 2, f'{{{2+2}}}'➝ {4}, f'{{{{2+2}}}}'{{{2 + 2}} ve benzeri gibi şeyler komiktir . Mantıklı ama ilk bakışta biraz bulmaca.
fedorqui 'SO

2
Basitçe söylemek gerekirse, çünkü f'{74}'aynı f'74'.
kaya3

1
Bu f-dizeleriyle yeni bir şey değil, iyi eski de str.formatbunu yapıyor.
Peilonrayz

@Peilonrayz Nasıl? "{74}".format(...)en az 74 element içeren bir dizi gerektirecektir.
gerrit

Yanıtlar:


118

Çift parantezler parantezlerden kaçar, böylece enterpolasyon olmaz: {{{ve }}}. Ve 74değişmeyen bir dize kalır '74'.

Üçlü diş telleri ile, dış çift diş telleri yukarıdaki ile aynı şekilde kaçar. İç parantezler ise, değerin düzenli dize enterpolasyonuna yol açar 74.

Yani, dize f'{{{74}}}'eşittir f'{{ {74} }}', ancak boşluklar içermez (veya, eşit olarak, '{' + f'{74}' + '}').

Sayısal sabiti bir değişkenle değiştirirken farkı görebilirsiniz:

In [1]: x = 74

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

In [3]: f'{{{x}}}'
Out[3]: '{74}'
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.