如何在python中使用**kwargs中的函数变量?

如何在python中使用**kwargs中的函数变量?,python,decorator,python-decorators,Python,Decorator,Python Decorators,我正在尝试执行以下操作,但得到一个异常名称ErrorGlobal name“rid”未定义 您将rid作为位置参数传入,因此可以在args中找到: 如果您的装饰程序总是需要访问该参数,只需显式命名它: def safe_forcecall(fn): def _safe_forcecall(self, rid, *args, **kwargs): if self._token_valid(rid) is not None: return fn(sel

我正在尝试执行以下操作,但得到一个异常名称ErrorGlobal name“rid”未定义

您将rid作为位置参数传入,因此可以在args中找到:

如果您的装饰程序总是需要访问该参数,只需显式命名它:

def safe_forcecall(fn):
    def _safe_forcecall(self, rid, *args, **kwargs):
        if self._token_valid(rid) is not None:
            return fn(self, rid, *args, **kwargs)
    return _safe_forcecall
在kwargs字典中找不到该值;只有当您使用rid=rid参数调用add_booking时,它才会被放置在那里。通过在decorator包装函数中使用显式rid参数,可以确保它始终绑定到rid名称。

您将rid作为位置参数传入,因此可以在args中找到:

如果您的装饰程序总是需要访问该参数,只需显式命名它:

def safe_forcecall(fn):
    def _safe_forcecall(self, rid, *args, **kwargs):
        if self._token_valid(rid) is not None:
            return fn(self, rid, *args, **kwargs)
    return _safe_forcecall

在kwargs字典中找不到该值;只有当您使用rid=rid参数调用add_booking时,它才会被放置在那里。通过在decorator包装函数中使用显式rid参数,可以确保它始终绑定到rid名称。

谢谢!如果我需要做些什么?最好的方法是定义_safe_forcecallself,rid=None。。。然后检查它是否为None?@AviMeir:在您的修饰函数中,rid不是可选的。这将是您的第一个调用端口,使其成为具有默认值的关键字参数。然后,您可以测试它是否通过kwargs中的if'rid'传递到装饰器包装中。我可以这样做吗?最好的做法是在kwargs中执行以下操作:if'rid':lcode=kwargs['rid']else:lcode=0@AviMeir:您将使用lcode=kwargs。获取'rid',0,例如,向字典查询密钥,如果未设置,则指定默认值。谢谢!如果我需要做些什么?最好的方法是定义_safe_forcecallself,rid=None。。。然后检查它是否为None?@AviMeir:在您的修饰函数中,rid不是可选的。这将是您的第一个调用端口,使其成为具有默认值的关键字参数。然后,您可以测试它是否通过kwargs中的if'rid'传递到装饰器包装中。我可以这样做吗?最好的做法是在kwargs中执行以下操作:if'rid':lcode=kwargs['rid']else:lcode=0@AviMeir:您将使用lcode=kwargs.get'rid',0,例如,向字典查询密钥,如果未设置,则指定默认值。
def safe_forcecall(fn):
    def _safe_forcecall(self, rid, *args, **kwargs):
        if self._token_valid(rid) is not None:
            return fn(self, rid, *args, **kwargs)
    return _safe_forcecall