'Kwargs' пуст в Python Decorator - PullRequest
       4

'Kwargs' пуст в Python Decorator

0 голосов
/ 31 августа 2018

Я запускаю демо-версию декоратора ниже.

def logger(func):
    def inner(*args, **kwargs):
        print(args)
        print(kwargs)
        return func(*args, **kwargs)
    return inner

@logger
def foo1(a, b, c, x=2, y=1):
    print(x * y)

foo1(6,7,8)

вывод:

(6, 7, 8)
{}
2

Почему диктат пуст? Я думаю, что это должно быть {'x':2, 'y':1}

1 Ответ

0 голосов
/ 31 августа 2018

Это из-за отсутствия kwargs в вызове функции. Смотрите примеры:

# kwargs are not provided, function will use default. But decorator know nothing about that.
>>> foo1(6, 7, 8)
(6, 7, 8)
{}
2

# new kwargs are provided and passed to decorator too
>>> foo1(6, 7, 8, x=9, y=10)
(6, 7, 8)
{'x': 9, 'y': 10}
90
...