Содржина на објавата
Все знают как красиво написать дату и время с помощью библиотеки datetime: >>> from datetime import datetime >>> >>> dt = datetime.now() >>> dt.strftime('%Y.%m.%d %H:%I') '2020.01.08 12:00' Но мало кто знает, что тоже самое можно сделать и другим способом: >>> "{:%Y.%m.%d %H:%I}".format(dt) '2020.01.08 12:00' Если паттерн хранится отдельно, то можно записать так >>> date_frmt = '%Y.%m.%d %H:%I' >>> '{:{}}'.format(dt, date_frmt) '2020.01.08 12:00' Хм, а чем это лучше, спросите вы? 1. Удобно писать более комплексные шаблоны >>> event_name = 'Python-вебинар' >>> "Сегодня, {:%Y.%m.%d}, ровно в {:%H:%I} мы начинаем {}!".format(dt, dt, event_name) 'Сегодня, 2020.01.08, ровно в 12:00 мы начинаем Python-вебинар!' (ну да, такие паттерны можно писать и в strftime, если что. Хотя, можете напороться на UnicodeEncodeError даже в Python3!) Чтобы не повторять аргумент dt делаем форматирование по индексу "{0:%Y} {0:%H.%I}".format(dt) Если используем разные даты, то можно сделать форматирование по имени "{date1:%Y}-{date2:%Y} (current {date1:%Y})".format(date1=dt1, date2=dt2) 2. Форматирование даты находится непосредственно в тексте а не в отдельной переменной, что бывает удобней в некоторых случаях. Например, если текст хранится в базе данных то не нужно гдето отдельно хранить формат дат. 3. Зная про эту фишку, и что реализуется она с помощью magic-метода __format__ можно начать писать свои классы с подобным функционалом! Собственно, в классе datetime этот метод просто вызывает уже знакомый метод strftime. Я набросал простой пример с таким поведением, смотрим в гистах 🔗.