web-dev-qa-db-de.com

Warum ist f '{{{74}}}' dasselbe wie f '{{74}}' mit f-Strings?

f-Strings sind verfügbar unter Python 3.6 und sehr nützlich zum Formatieren von Strings:

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

Lesen Sie mehr darüber in Python 3s f-Strings: Eine verbesserte Syntax zur Formatierung von Strings (Anleitung) . Ich habe ein interessantes Muster gefunden:

Beachten Sie, dass die Verwendung dreifacher Klammern dazu führt, dass Ihre Zeichenfolge nur einzelne Klammern enthält:

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

Sie können jedoch mehr Zahnspangen anzeigen, wenn Sie mehr als dreifache Zahnspangen verwenden:

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

Und genau das ist der Fall:

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

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

Wenn wir nun von zwei { bis drei ist das Ergebnis das gleiche:

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

Wir brauchen also bis zu 4! ({{{{) um zwei geschweifte Klammern als Ausgabe zu erhalten:

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

Warum ist das? Was passiert mit zwei geschweiften Klammern Python benötigt von diesem Moment an eine zusätzliche?

Doppelte Klammern entkommen den Klammern, so dass keine Interpolation stattfindet: {{{, und }}}. Und 74 bleibt eine unveränderte Zeichenfolge, '74'.

Bei dreifachen Klammern werden die äußeren Doppelklammern wie oben ausgeblendet. Die inneren Klammern führen dagegen zu einer regelmäßigen String-Interpolation des Wertes 74.

Das heißt, die Zeichenfolge f'{{{74}}}' ist äquivalent zu f'{{ {74} }}', aber ohne Leerzeichen (oder gleichwertig mit '{' + f'{74}' + '}').

Sie können den Unterschied sehen, wenn Sie die numerische Konstante durch eine Variable ersetzen:

In [1]: x = 74

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

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