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

Python中能否将函数参数传入装饰器?(Pycord场景)

如何将函数参数传递给装饰器(适配Pycord场景)

你需要的是让装饰器能获取到被装饰函数接收到的参数,而非在装饰器初始化阶段传参——毕竟Pycord会自动把参数直接传给函数,没法用@my_decorator("arg")这种带初始化参数的装饰器语法。

完全可以实现这个需求,不需要把逻辑写在函数内部,核心思路是让装饰器的内层包装函数接收并传递参数,在包装函数里直接访问这些参数做处理:

固定参数场景示例

def my_decorator(func):
    def inner(arg):
        # 在这里直接使用传给my_func的参数
        print(f"装饰器捕获到参数: {arg}")
        # 执行原函数并保存结果
        result = func(arg)
        # 可根据参数添加额外逻辑,比如校验、日志等
        if isinstance(arg, str) and len(arg) < 3:
            print("警告:参数长度过短")
        return result
    return inner

@my_decorator
def my_func(arg):
    print(f"原函数接收到参数: {arg}")
    return f"返回结果: {arg}"

可变参数场景示例(适配Pycord命令的多参数情况)

如果被装饰的Pycord命令函数参数不固定,用*args和**kwargs可以完美适配:

def my_decorator(func):
    def inner(*args, **kwargs):
        # 查看所有位置参数
        print(f"装饰器捕获位置参数: {args}")
        # 查看所有关键字参数
        print(f"装饰器捕获关键字参数: {kwargs}")
        # 执行原函数
        result = func(*args, **kwargs)
        return result
    return inner

@my_decorator
def my_pycord_command(ctx, user_input, option=None):
    print(f"命令函数接收到: {ctx}, {user_input}, {option}")

这种写法完全兼容Pycord的调用逻辑,所有扩展逻辑都集中在装饰器里,后续维护只需要修改这一处即可,不用改动多个函数。

内容的提问来源于stack exchange,提问作者Morris van den Bergh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 06:10:05