Найти - Пользователи
Полная версия: Декоратор и параметры
Начало » Python для новичков » Декоратор и параметры
1
VadimK
 # python 3.10
def pre_params(_func=None, *, delay=0):
    def pre_execute(func):
        @wraps(func)
        def wrapper(*args, **kwargs):
            print(f'Pre executing with delay {delay}')
            return func(*args, **kwargs)
        return wrapper
    print (f'_func: {_func}')
    if _func is None:
        return pre_execute
    else:
        return pre_execute(_func)
@pre_params
def sample_function(value: int, name: str) -> str:
    print(f'{name} on {value}')
    return 'RUN OK'
@pre_params(delay=10)
def sample_function(value: int, name: str) -> str:
    print(f'{name} on {value}')
    return 'RUN OK'

Собственно есть декоратор и пример его использования. И к этому вопросы

1. в самой первой строке идет вызов параметров. Что за “ *, ” в качестве второго параметра ?
2. почему при вызове декоратора без параметра, _func имеет значение равное “<function sample_function at 0x7f2395d62200>” , а при вызове с параметром, _func = None

py.user.next
VadimK
1. в самой первой строке идет вызов параметров. Что за “ *, ” в качестве второго параметра ?
https://peps.python.org/pep-3102/
Это означает “голая звёздочка”. До звёздочки стоят аргументы, которые можно передавать в функцию по позиции, по имени или путём их пропускания. После звёздочки стоят аргументы, которые можно передавать в функцию только по имени или путём их пропускания. Аргументы после звёздочки нельзя передавать по позиции.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB