如何将关键字对作为参数传递给函数中的模块?
Posted
技术标签:
【中文标题】如何将关键字对作为参数传递给函数中的模块?【英文标题】: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))
我试过传入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])
如何将关键字“days”和“years”传递给函数 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)
...
【讨论】:
以上是关于如何将关键字对作为参数传递给函数中的模块?的主要内容,如果未能解决你的问题,请参考以下文章