#python-3.x #function #python-datetime
#python-3.x #функция #python-дата-время
Вопрос:
Ниже приведена функция, которая выполняет поиск по списку дат и возвращает количество событий на указанную дату. Я могу пройти через количество дней relativedelta(days=x)
до завершения вызова zettel(1)
, но я также хотел бы пройти через несколько лет (т. Е. relativedelta(years=x)
).
from datetime import date, datetime, timedelta from dateutil.relativedelta import relativedelta notelist = ['20211204', '20201205', '20191205', '20181205'] def zettel(x): ''' Returns the number of zettel created on this day 'x' years ago.''' note_uuid = datetime.now() - relativedelta(days=x) note_count = 0 for uuid in notelist: if uuid == note_uuid.strftime('%Y%m%d'): note_count = 1 return [x, note_count, note_uuid.strftime('%Y%m%d')] print(f'[{zettel(1)[1]} new zettel yesterday.') print(zettel(1))
Я попытался войти days
, years
и номер с
note_uuid = datetime.now() - relativedelta(y=x)
Но я понимаю NameError: name 'years' is not defined
Когда я вызываю функцию с print(f'[{zettel(years, 1)[1]})
Я попытался передать весь аргумент days=1
и year=1
с
note_uuid = datetime.now() - relativedelta(x)
Но я понимаю TypeError: zettel() got an unexpected keyword argument 'years'
Когда я вызываю функцию с print(f'[{zettel(years=1)[1]})
Как я могу передать ключевое слово «дни» и «годы» в функцию relativedelta? Возможно ли это?
Этот код работает, но я хотел бы расширить его, чтобы было полезно подсчитать другое количество дней или лет.
Ответ №1:
Есть несколько различных способов, которыми вы могли бы этого достичь.
Вариант 1: Пройдите через «дни» и «годы» напрямую. Пример вызова: zettel(years=1)
.
def zettel(years=0, days=0): note_uuid = datetime.now() - relativedelta(years=years, days=days) ...
Вариант 2: Передайте relativedelta напрямую. Пример вызова: zettel(relativedelta(years=1))
.
def zettel(lookback): note_uuid = datetime.now() - lookback ...
Вариант 3: Передайте аргументы ключевых слов. Пример вызова: zettel(years=1)
.
def zettel(**lookback): note_uuid = datetime.now() - relativedelta(**lookback) ...