Python装饰器提取参数

用户名

我是装饰器的新手,正在尝试编写一个允许我获取命名参数(如果存在)的方法,否则可以获取Exception之类的东西。

解释:

# my decorator!
def test_mem(key, modifier):
    def deco(func):
        @wraps(func)
        def wrapper(*args, **kwargs):
            # something here, s.t.
            # print(args + modifier) <------
            return func(*args, **kwargs)
    return wrapper
return deco

我的功能

@test_mem('username', modifier = '_allowed')
def myfunc(arg1, username = None, stuff = None):
    # logic, this code is always run!
    return 'Done'

myfunc(1, 3)
>>>> '3_allowed'
myfunc(1, username = 3)
>>>> '3_allowed'
myfunc(1, stuff = [])
>>>> Exception

当我对其进行编码时,示例1和示例2是互斥的,而示例1可以使示例2失效,反之亦然。我正在尝试使用它来创建一些自动键。

Merbs

您可能还需要考虑inspect.getcallargs()在装饰器内,您可以使用:

dictionary = inspect.getcallargs(func, *args, **kwargs)
dictionary['username']  # Gets you the username, default or modifed

要从链接的Python文档复制:

>>> from inspect import getcallargs
>>> def f(a, b=1, *pos, **named):
...     pass
>>> getcallargs(f, 1, 2, 3)
{'a': 1, 'named': {}, 'b': 2, 'pos': (3,)}
>>> getcallargs(f, a=2, x=4)
{'a': 2, 'named': {'x': 4}, 'b': 1, 'pos': ()}
>>> getcallargs(f)
Traceback (most recent call last):
...
TypeError: f() takes at least 1 argument (0 given)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

带参数的 Python 装饰器

来自分类Dev

带有装饰函数参数的python装饰器

来自分类Dev

Python装饰器处理装饰函数的默认参数

来自分类Dev

Python装饰器处理装饰函数的默认参数

来自分类Dev

具有装饰函数任意定位参数的 Python 装饰器

来自分类Dev

使用@语法的python装饰器参数

来自分类Dev

如何理解python装饰器参数传递

来自分类Dev

Python装饰器访问参数的名称

来自分类Dev

如何使用带参数的python装饰器?

来自分类Dev

Python装饰器。传递参数时出错

来自分类Dev

带参数的装饰器

来自分类Dev

带参数的装饰器

来自分类Dev

带参数的装饰器

来自分类Dev

带参数的装饰器

来自分类Dev

用python装饰装饰器

来自分类Dev

带有可选参数(功能)的Python装饰器

来自分类Dev

Python模拟补丁功能装饰器的参数值

来自分类Dev

在运行时获取python装饰器参数

来自分类Dev

如何使python装饰器中的参数可配置?

来自分类Dev

Python装饰器向函数及其签名添加参数

来自分类Dev

Python:将可选参数装饰器实现为类

来自分类Dev

在Python中编写带有参数的装饰器

来自分类Dev

使用包装函数中的变量的python装饰器参数

来自分类Dev

具有可选的可调用参数的Python装饰器

来自分类Dev

关于如何通过Python装饰器传递参数的困惑

来自分类Dev

带有可选参数(功能)的Python装饰器

来自分类Dev

Python模拟补丁功能装饰器的参数值

来自分类Dev

打字稿装饰器参数

来自分类Dev

变量作为装饰器参数