Хочу напомнить об одной занятной штуке, которую сам периодически забываю.
Как переводят дату-время в строку? Обычно так:
>>> from datetime import datetime
>>> d = datetime.now()
>>> d.strftime("%d.%m.%Y")
'25.10.2012'
А на самом деле можно и так:
>>> "{:%d.%m.%Y}".format(d)
'25.10.2012'
Как это работает?
.format разбирает строку формата и определяет параметры
форматирования для аргументов. Для первого аргумента, очевидно, это
%d.%m.%Y.
Это значение попадает в метод .__format__ в качестве аргумента, а
результат вызова подставляется в шаблон:
>>> d.__format__("%d.%m.%Y")
'25.10.2012'
Что это дает? Можно коротко и элегантно записывать сложные шаблоны:
>>> "{} — {:%d.%m.%Y}".format("Today", d)
'Today — 25.10.2012'
То же самое работает и для других классов в datetime и т.д.:
>>> from datetime import date
>>> "{:%A}".format(date.today())
'Thursday'
Более того, никто не мешает определить .__format__ для своего
класса, возвращающий строку построенную по заданному шаблону.
Только ради этого стоит переключиться со старого стиля "%s" % "abc"
на новый, симпатичный и удобный.