Python如何将关键字参数对传递给函数内调用的relativedelta
实现方案
你可以通过关键字参数透传的方式,直接将days/years等参数传递给relativedelta,不需要硬编码参数类型。
报错原因说明
- 第一个
NameError是因为你将years作为变量传入,但years是relativedelta的参数名,不是你提前定义的变量,自然找不到 - 第二个
TypeError是因为原函数zettel的定义只支持接收一个位置参数x,没有配置接收关键字参数的能力
修改后的完整代码
from datetime import date, datetime, timedelta from dateutil.relativedelta import relativedelta notelist = ['20211204', '20201205', '20191205', '20181205'] def zettel(**kwargs): ''' 统计指定时间间隔前当天的笔记数量 支持传入relativedelta支持的所有关键字参数,比如 days=1、years=2 等 ''' note_uuid = datetime.now() - relativedelta(**kwargs) note_count = 0 for uuid in notelist: if uuid == note_uuid.strftime('%Y%m%d'): note_count += 1 # 调整返回值,返回使用的参数、数量、对应日期 return [kwargs, note_count, note_uuid.strftime('%Y%m%d')] # 调用示例 # 查1天前的数量 print(f'[{zettel(days=1)[1]}] 条新笔记(昨天)') print(zettel(days=1)) # 查1年前的数量 print(f'[{zettel(years=1)[1]}] 条新笔记(一年前的今天)') print(zettel(years=1))
调用说明
你可以直接传入relativedelta支持的所有时间参数,比如months=3、weeks=2等,不需要额外修改函数内部逻辑,扩展能力更强。
内容的提问来源于stack exchange,提问作者Will Simpson
相关产品推荐
相关产品推荐

