Модернизация F-строк: Python 3.12
В версии 3.12 значительно улучшили работу f‑строк и сделали их более гибкими.
Использование кавычек
Python поддерживает несколько различных типов кавычек. Вы можете использовать одинарные ' и двойные кавычки "". Также можно использовать тройные одинарные ''' и тройные двойные кавычки """. Все эти строковые разделители работают и для f-строк. Эта функция позволяет вставлять кавычки в f-строки. Она также позволяет вносить строковые литералы во встроенные выражения и даже создавать вложенные f-строки.
Типичным случаем использования разных кавычек в f-строке является необходимость использования апострофа или обращения к ключу словаря во встроенном выражении:
В этом примере имеется словарь с данными о человеке. Для определения f-строки используются двойные кавычки. Для доступа к ключу словаря используются одинарные кавычки. В сокращении "You're" одинарная кавычка используется в качестве апострофа.
Итак, где же ограничение на использование кавычек в f-строках до версии Python 3.11? Проблема заключается в том, что в f-строке нельзя повторно использовать кавычки:
В данном примере при попытке повторного использования двойных кавычек для доступа к ключу словаря f-строка не работает, и Python выдает синтаксическую ошибку.
Новые f-строки в Python 3.12 решили эту проблему, позволив повторно использовать кавычки:
В данном примере вы повторно используете двойные кавычки во встроенных выражениях, и f-строка работает корректно. Ограничение исчезло. Однако может быть не совсем понятно, является ли повторное использование кавычек в этом примере более чистым, чем разграничение вложенных строк с помощью разных кавычек.
#python #djangoschool
В версии 3.12 значительно улучшили работу f‑строк и сделали их более гибкими.
Использование кавычек
Python поддерживает несколько различных типов кавычек. Вы можете использовать одинарные ' и двойные кавычки "". Также можно использовать тройные одинарные ''' и тройные двойные кавычки """. Все эти строковые разделители работают и для f-строк. Эта функция позволяет вставлять кавычки в f-строки. Она также позволяет вносить строковые литералы во встроенные выражения и даже создавать вложенные f-строки.
Типичным случаем использования разных кавычек в f-строке является необходимость использования апострофа или обращения к ключу словаря во встроенном выражении:
>>> person = {"name": "Jane", "age": 25}
>>> f"Hello, {person['name']}! You're {person['age']} years old."
"Hello, Jane! You're 25 years old."В этом примере имеется словарь с данными о человеке. Для определения f-строки используются двойные кавычки. Для доступа к ключу словаря используются одинарные кавычки. В сокращении "You're" одинарная кавычка используется в качестве апострофа.
Итак, где же ограничение на использование кавычек в f-строках до версии Python 3.11? Проблема заключается в том, что в f-строке нельзя повторно использовать кавычки:
>>> f"Hello, {person["name"]}!"
File "<input>", line 1
f"Hello, {person["name"]}!"
^^^^
SyntaxError: f-string: unmatched '['В данном примере при попытке повторного использования двойных кавычек для доступа к ключу словаря f-строка не работает, и Python выдает синтаксическую ошибку.
Новые f-строки в Python 3.12 решили эту проблему, позволив повторно использовать кавычки:
>>> # Python 3.12
>>> person = {"name": "Jane", "age": 25}
>>> f"Hello, {person["name"]}!"
'Hello, Jane!'
В данном примере вы повторно используете двойные кавычки во встроенных выражениях, и f-строка работает корректно. Ограничение исчезло. Однако может быть не совсем понятно, является ли повторное использование кавычек в этом примере более чистым, чем разграничение вложенных строк с помощью разных кавычек.
#python #djangoschool
👍12
Существует еще одно ограничение f-строки, тесно связанное с кавычками. В Python можно вложить ровно столько f-строк, сколько существует разделителей кавычек:
Количество уровней вложенности в f-строке до версии Python 3.11 ограничено доступными разделителями строк, которыми являются ", ', "" и '''. Таким образом, у вас есть только четыре разделителя, которые можно использовать для разграничения уровней вложенности.
В Python 3.12 это ограничение снято, поскольку можно повторно использовать кавычки:
До появления новой реализации f-строк не существовало формального ограничения на количество уровней вложенности. Однако тот факт, что нельзя было повторно использовать строковые кавычки, накладывал естественное ограничение на допустимые уровни вложенности в литералы f-строк. Начиная с Python 3.12, кавычки можно использовать повторно, поэтому ограничений на вложенность f-строк не существует.
#python #djangoschool
>>> f"""{
... f'''{
... f"{f'{42}'}"
... }'''
... }"""
'42'
>>> f"""{
... f'''{
... f"{f'{f"{42}"}'}"
... }'''
... }"""
File "<stdin>", line 1
(f"{f'{f"{42}"}'}")
^
SyntaxError: f-string: f-string: unterminated stringКоличество уровней вложенности в f-строке до версии Python 3.11 ограничено доступными разделителями строк, которыми являются ", ', "" и '''. Таким образом, у вас есть только четыре разделителя, которые можно использовать для разграничения уровней вложенности.
В Python 3.12 это ограничение снято, поскольку можно повторно использовать кавычки:
>>> # Python 3.12
>>> f"{
... f"{
... f"{
... f"{
... f"{
... f"Deeply nested f-string!"
... }"
... }"
... }"
... }"
... }"
'Deeply nested f-string!'
До появления новой реализации f-строк не существовало формального ограничения на количество уровней вложенности. Однако тот факт, что нельзя было повторно использовать строковые кавычки, накладывал естественное ограничение на допустимые уровни вложенности в литералы f-строк. Начиная с Python 3.12, кавычки можно использовать повторно, поэтому ограничений на вложенность f-строк не существует.
#python #djangoschool
🔥4👍2