【问题标题】:How do I pass a keyword pair as an argument to a module in a function?如何将关键字对作为参数传递给函数中的模块?
【发布时间】:2022-01-11 09:01:58
【问题描述】:

下面是一个搜索日期列表并返回指定日期出现次数的函数。我可以通过调用zettel(1) 将天数传递给relativedelta(days=x),但我也想传递若干年(即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))

我试过传入daysyears 和带有的号码

    note_uuid = datetime.now() - relativedelta(y=x)

但我明白了 NameError: name 'years' is not defined 当我用 print(f'[{zettel(years, 1)[1]})

我尝试将整个论点 days=1year=1 传递给

    note_uuid = datetime.now() - relativedelta(x)

但我明白了 TypeError: zettel() got an unexpected keyword argument 'years' 当我用 print(f'[{zettel(years=1)[1]})

如何将关键字“days”和“years”传递给函数 relativedelta?这可能吗?

此代码有效,但我想对其进行扩展,以便计算不同的天数或年数。

【问题讨论】:

    标签: python-3.x function python-datetime


    【解决方案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)
        ...
    

    【讨论】:

      猜你喜欢
      • 2017-08-01
      • 2010-09-24
      • 1970-01-01
      • 2016-12-13
      • 2021-12-06
      • 1970-01-01
      • 1970-01-01
      • 2013-01-27
      相关资源
      最近更新 更多