Кто-нибудь может придумать элегантный лайнер для этого?
Моя попытка:
dt.datetime.today() if dt.datetime.today().isoweekday() in range(1, 6) else 'date of last friday?'
Я бы предпочел две линии, хотя можно и 1. Причина в том, что если вы вызываете dt.datetime.today() дважды, существует (очень маленькая) вероятность того, что вы получите два разных ответа, если он выполняется за доли секунды до полуночи. Кроме того, вероятно, более эффективно сохранить значение, чем дважды вызывать функцию.
import datetime as dt
thisday = dt.datetime.today().date()
thisday -= dt.timedelta(days=max(0,thisday.weekday()-4,0))
В субботу weekday() возвращает 5, в воскресенье возвращает 6, поэтому мы вычитаем 1 или 2 дня соответственно. В другие дни weekday() - 4 равно нулю или меньше, поэтому функция max возвращает ноль и ничего не вычитается.
Замечательное решение, и ваши рассуждения о том, что вы предпочитаете две строки, изменили мое мнение. Спасибо!