Ciągi f są dostępne w Pythonie 3.6 i są bardzo przydatne do formatowania ciągów:
>>> n='you'
>>> f'hello {n}, how are you?'
'hello you, how are you?'
Przeczytaj więcej o nich w f-Strings Pythona 3: Ulepszona składnia formatowania łańcuchów (przewodnik) . Znalazłem interesujący wzór:
Zauważ, że użycie potrójnych nawiasów spowoduje, że w łańcuchu będą znajdować się tylko pojedyncze nawiasy:
>>> f"{{{74}}}" '{74}'
Możesz jednak wyświetlić więcej nawiasów klamrowych, aby pokazać, jeśli używasz więcej niż potrójnych nawiasów klamrowych:
>>> f"{{{{74}}}}" '{{74}}'
I dokładnie tak jest:
>>> f'{74}'
'74'
>>> f'{{74}}'
'{74}'
Teraz, jeśli przejdziemy od dwóch {
do trzech, wynik będzie taki sam:
>>> f'{{{74}}}'
'{74}' # same as f'{{74}}' !
Potrzebujemy więc do 4! ( {{{{
), aby uzyskać dwa nawiasy klamrowe jako wynik:
>>> f'{{{{74}}}}'
'{{74}}'
Dlaczego to? Co dzieje się z dwoma nawiasami klamrowymi, aby Python wymagał dodatkowego od tego momentu?
python
python-3.x
string
formatting
f-string
fedorqui „SO przestań szkodzić”
źródło
źródło
f"{{2+2}}"
if"{{{2+2}}}"
, które są'{2+2}'
i'{4}'
odpowiedniof'{2+2}'
zwraca 4,f'{{2+2}}'
zwraca 2 + 2,f'{{{2+2}}}'
➝ {4},f'{{{{2+2}}}}'
➝ {{2 + 2}} i tak dalej. Ma to sens, ale na pierwszy rzut oka trochę łamigłówki.f'{74}'
jest taki sam jakf'74'
.str.format
też to robi."{74}".format(...)
wymagałoby sekwencji z co najmniej 74 elementami.Odpowiedzi:
Podwójne nawiasy klamrowe uciekają od nawiasów klamrowych, aby nie doszło do interpolacji:
{{
➝{
i}}
➝}
. I74
pozostaje niezmieniony łańcuch,'74'
.W przypadku potrójnych nawiasów zewnętrzne podwójne nawiasy klamrowe są unikane, tak jak powyżej. Natomiast wewnętrzne nawiasy klamrowe prowadzą do regularnej interpolacji ciągu znaków
74
.Oznacza to, że łańcuch
f'{{{74}}}'
jest równoważnyf'{{ {74} }}'
, ale bez spacji (lub równoważnie,'{' + f'{74}' + '}'
).Różnicę można zobaczyć, zastępując stałą numeryczną zmienną:
źródło