Как передать пару ключевых слов в качестве аргумента модулю в функции?

#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)  ...