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

如何编写Python Decorator强制函数调用时必须显式传参

实现方案

完全可以通过自定义装饰器实现该需求,以下是可直接使用的实现代码:

装饰器代码

import functools

def explicitarguments(func):
    @functools.wraps(func)
    def wrapper(*args, **kwargs):
        # 检查是否传入了位置参数
        if args:
            raise TypeError(f"调用函数 {func.__name__} 时不允许使用位置参数,所有参数必须显式指定参数名传参")
        return func(**kwargs)
    return wrapper

使用方式

和你期望的用法完全一致:

@explicitarguments
def foo(X, A=None, B=None):
    pass

效果验证

  • 合法调用(正常执行):foo(X=1, A=2, B=3)
  • 非法调用(直接抛出异常):
    • foo(1, 2, 3) 触发TypeError
    • foo(1, A=2, B=3) 同样触发TypeError,只要有参数通过位置传递就会被拦截

实现逻辑说明

装饰器会拦截所有对目标函数的调用,检查调用时是否传入了位置参数(即*args是否非空),只要存在位置参数就直接抛出异常,仅当所有参数都通过关键字形式传入时才会执行原函数。参数合法性(比如是否传入不存在的参数、必填参数是否缺失)会由Python原生的参数检查逻辑负责,无需额外实现。

内容的提问来源于stack exchange,提问作者Carlos Adir

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 01:45:07