You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 16:27:00