Магия строк f-strings в Python 5 революционных трюков, которые каждому программисту нужно знать

Магия f-строк в Python 5 революционных трюков, которые каждому программисту следует знать

 

Если вы уже достаточно долго используете Python, то, вероятно, вы перестали использовать старомодный метод format() для форматирования строк. И перешли к более кратким и легко поддерживаемым f-строкам введенные в Python 3.6. Но это еще не все.

С версии Python 3.8 появились новые возможности f-строки, которые можно использовать для отладки, форматирования объектов даты и времени с плавающей точкой и многое другое. Мы рассмотрим эти случаи использования в данном учебнике. 

 

Примечание: Чтобы запустить примеры кода, вам нужно установить Python версии 3.8 или выше.

 

1. Более простая отладка

 

При программировании вы, возможно, используете оператор print() для вывода значений переменных, чтобы проверить, соответствуют ли они вашим ожиданиям. С помощью f-строк вы можете включать имена переменных и их значения для более простой отладки.

Рассмотрим следующий пример:

length = 4.5breadth = 7.5height = 9.0print(f'{length=}, {breadth=}, {height=}')

 

Вывод:

Output >>> length=4.5, breadth=7.5, height=9.0

 

Эта функция особенно полезна, когда вы хотите понять состояние ваших переменных в процессе отладки. Однако, для продакшн-кода вам следует настроить логирование с требуемыми уровнями журнала.

 

2. Красивое форматирование чисел типа float и дат 

 

При печати чисел с плавающей точкой и объектов даты и времени в Python вы должны:

  • Форматировать числа с плавающей точкой так, чтобы после десятичной точки было фиксированное количество знаков
  • Форматировать даты в определенном формате

F-строки предоставляют простой способ форматирования чисел типа float и дат в соответствии с вашими требованиями.

В этом примере форматируется переменная price для отображения двух знаков после десятичной точки с помощью {price:.2f} следующим образом:

price = 1299.500print(f'Цена: ${price:.2f}')

 

Вывод >>> Цена: $1299.50

 

Ранее вы использовали метод strftime() для форматирования объектов даты и времени в Python. Но вы также можете сделать это и с помощью f-строк. Вот пример:

from datetime import datetimecurrent_time = datetime.now()print(f'Текущая дата и время: {current_time:%Y-%m-%d %H:%M:%S}')

 

Вывод >>> Текущая дата и время: 2023-10-12 15:25:08

 

Давайте создадим простой пример, который включает форматирование и даты и чисел:

price = 1299.500purchase_date = datetime(2023, 10, 12, 15, 30)print(f'Товар куплен за ${price:.2f} {purchase_date:%B %d, %Y в %H:%M}')

 

Вывод >>> Товар куплен за $1299.50 12 октября 2023 в 15:30

 

3. Преобразование основания числовых значений

 

F-строки поддерживают преобразование основания для числовых типов данных, позволяя вам преобразовывать числа из одной системы счисления в другую. Таким образом, вам не нужно писать отдельные функции или лямбда-функции для просмотра числа в другой системе счисления.

Чтобы вывести двоичное и шестнадцатеричное представления десятичного числа 42, вы можете использовать f-строку:

num = 42print(f'Десятичное {num}, в двоичной системе: {num:b}, в шестнадцатеричной системе: {num:x}')

 

Вывод >>>Десятичное 42, в двоичной системе: 101010, в шестнадцатеричной системе: 2a

 

Как видно, это полезно, когда вам нужно выводить числа в разных системах счисления, например, двоичной или шестнадцатеричной. Рассмотрим еще один пример преобразования десятичного числа в восьмеричное:

num = 25print(f'Десятичное {num}, в восьмеричной системе: {num:o}')

 

Вывод >>> Десятичное 25, в восьмеричной системе: 31

 

Запомните: Oct 31 = Dec 25? Да, этот пример вдохновлен мемами “Почему разработчики путают Хэллоуин с Рождеством?”

 

4. Полезные преобразования в ASCII и repr

 

Вы можете использовать флаги преобразования !a и !r в f-строках для форматирования строк в ASCII и repr строк, соответственно.

Иногда вам может потребоваться преобразовать строку в ее ASCII-нотацию. Вот как вы можете сделать это с помощью флага !a:

emoji = "🙂" print(f'ASCII-представление Emoji: {emoji!a}')

 

Вывод >>>ASCII-представление Emoji: '\U0001f642'

 

Чтобы получить repr любого объекта, можно использовать f-строки с флагом !r:

from dataclasses import dataclass@dataclassclass Point3D:    x: float = 0.0  y: float = 0.0  z: float = 0.0point = Point3D(0.5, 2.5, 1.5)print(f'Представление объекта 3D-точка: {point!r}')

 

Классы данных Python поставляются с реализацией по умолчанию для __repr__, поэтому нам не нужно явно писать его.

Вывод >>> Представление объекта 3D-точка: Point3D(x=0.5, y=2.5, z=1.5)

 

5. Форматирование шаблонов подсказок LLM

 

При работе с большими языковыми моделями, такими как Llama и GPT-4, f-строки полезны для создания шаблонов подсказок. 

Вместо хардкода подсказок можно создавать многократно используемые и составные шаблоны подсказок с помощью f-строк. Затем можно вставлять переменные, вопросы или контекст по мере необходимости. 

Если вы используете фреймворк, например, LangChain, вы можете использовать функции PromptTemplate в рамках этого фреймворка. Но даже если нет, всегда можно использовать шаблоны подсказок на основе f-строк.

Подсказки могут быть такими простыми, как:

prompt_1 = "Покажите мне топ-5 самых продаваемых книг Стивена Кинга."

 

Или немного более гибкими (но все равно простыми):

num = 5author = 'Стивен Кинг'prompt_2 = f"Покажите мне топ-{num} самых продаваемых книг {author}."

 

В некоторых случаях полезно добавить контекст и несколько примеров в подсказку.

Рассмотрим этот пример:

# конкtextuser_context = "Я планирую поехать в Париж; мне нужна некоторая информация."# примерыfew_shot_examples = [    {       "запрос": "Какие есть популярные туристические достопримечательности в Париже?",     "ответ": "Эйфелева башня, Лувр и собор Парижской Богоматери - некоторые популярные достопримечательности.",    },  {       "запрос": "Какая погода в Париже в ноябре?",       "ответ": "В ноябре в Париже прохладная и влажная погода с температурой около 10-15°C.", },]# вопросuser_question = "Можете ли вы порекомендовать хорошие рестораны в Париже?"

 

Вот шаблон многократного использования подсказки с использованием f-строк. Который вы можете использовать в любом контексте, например, в запросе:

# Создание подсказки с использованием многострочной строкиprompt = f'''Контекст: {user_context}Примеры:'''for example in few_shot_examples:   prompt += f'''Вопрос:  {example['query']}\nОтвет: {example['answer']}\n'''prompt += f'''Запрос: {user_question}'''print(prompt)

 

Вот наша подсказка для данного примера:

Вывод >>>Контекст: Я планирую поехать в Париж; мне нужна информация.Примеры:Вопрос:  Какие популярные туристические достопримечательности в Париже?Ответ: Эйфелева башня, музей Лувр и собор Парижской Богоматери - некоторые популярные достопримечательности.Вопрос:  Какая погода в Париже в ноябре?Ответ: В ноябре в Париже прохладная и влажная погода с температурой около 10-15°C.Запрос: Можете ли вы порекомендовать хорошие рестораны в Париже?

 

Подведение итогов

 

И вот и все. Надеюсь, вы нашли несколько особенностей Python f-строк, которые можно добавить в свой набор инструментов программиста. Если вам интересно изучать Python, ознакомьтесь с нашей подборкой  5 бесплатных книг, которые помогут вам в овладении Python. Приятного обучения!

[Bala Priya C](https://twitter.com/balawc27) – разработчик и технический писатель из Индии. Она любит работать в области математики, программирования, науки о данных и создания контента. Ее интересы и экспертиза включают DevOps, науку о данных и обработку естественного языка. Она любит чтение, письмо, кодирование и кофе! В настоящее время она работает над изучением и передачей своих знаний сообществу разработчиков, создавая учебные пособия, руководства, мнения и многое другое.