Декораторы

Finch

Новичок
Пользователь
Апр 30, 2022
15
1
3
Добрый день, есть задача
Write a decorator that prints a function with arguments passed to it.
For example:
"add called with 4, 5"
Тоесть надо вывести сообщение что такая то функция приняла параметры допустим 2 и 4.
Но мне принтует результат функции уже а не агрументы которая она приняла. Что стоит поправить?
Python:
def logger(func):
    def wrapper(*args, **kwargs):
        arguments = func(*args, **kwargs)
        print(f'Function {func.__name__} get arguments {arguments}')
        return arguments
    return wrapper


@logger
def add(x, y):
    return x + y

@logger
def square_all(*args):
    return [arg ** 2 for arg in args]
add(2,4)
square_all(2,5)
 

Vershitel_sudeb

Vershitel sudeb
Команда форума
Модератор
Мар 17, 2021
933
208
43
20
Москва
если нужно чтобы выводились аргументы с которыми вызвана функция, например так:
Python:
def logger(func):
    def wrapper(*args, **kwargs):
        print(f'{func.__name__} called with {args}')
        return func(*args, **kwargs)
    return wrapper
 
Последнее редактирование:
  • Мне нравится
Реакции: Finch

Vershitel_sudeb

Vershitel sudeb
Команда форума
Модератор
Мар 17, 2021
933
208
43
20
Москва
И в чем вопрос?
 

Finch

Новичок
Пользователь
Апр 30, 2022
15
1
3
Я получаю результат:
Function add get arguments 6
Function square_all get arguments [4, 25]

А как сделать что бы я получил:
Function add get arguments 2,4
Function square_all get arguments [2, 5]
 

Finch

Новичок
Пользователь
Апр 30, 2022
15
1
3
если нужно чтобы выводились аргументы с которыми вызвана функция, например так:
Python:
def logger(func):
    def wrapper(*args, **kwargs):
        print(f'{func.__name__} called with {args}')
        return func(*args, **kwargs)
    return wrapper
[code]
Большое спасибо)
 

Форум IT Специалистов