Что берет inner в себе аргумент? обясните детально пжл
def decorator(func):
def inner(*args):
start = timer()
print(f"Function {func.__name__} starts its work")
func(*args)
end = timer()
print(f"Function {func.__name__} took {end-start} time")
return inner
@decorator
def something(a,b):
time.sleep(3)
print(a+b)
something(4,5)
Ответы (1 шт):
Функция inner принимает все аргументы функции, в которой вы используете декоратор.
В вашем случае это 4 и 6.
Если вы не понимаете как это использовать попробуйте прочитать ниже.
Дополнение
Декоратор - это доп. функция которая запускается перед запуском основной функции.
Посмотрим на примере:
def DopFunc(func):
def local_func(*args):
print("Все аргументы основной функции -", args)
return func(args)
return local_func
@DopFunc
def main(*args):
print("Выполнение основной функции")
main(1,2,4,"2344r")
Вывод:
Все аргументы основной функции - (1, 2, 4, '2344r')
Выполнение основной функции
Вот базовое применение декоратора, как видно local_func в *args
забирает все аргументы функции main
Вообще есть два вида "особенных аргументов для функции" это *args и **kwargs отличия их в том что *args если видит елементи которые переданы функции но уже нет никакой свободной переменной в функции то он собирает из них массив.
А **kwargs применяется как словарь с ключом и значением.
Пример:
def func(*args, **kwargs):
print("args -",args)
print("kwargs -", kwargs)
func("decorater", "class", "classroom", for_example="for_example", kwargs="args")
Вывод:
args - ('decorater', 'class', 'classroom')
kwargs - {'for_example': 'for_example', 'kwargs': 'args'}