Найти - Пользователи
Полная версия: Вызов функции через "двойные" аргументы
Начало » Python для новичков » Вызов функции через "двойные" аргументы
1
VadimK
Источник
 def close_db(fn):
    """Decorator to be used with tasks that may operate on the database."""
    @wraps(fn)
    def inner(*args, **kwargs):
        try:
            return fn(*args, **kwargs)
        finally:
            if not HUEY.immediate:
                close_old_connections()
    return inner
def db_task(*args, **kwargs):
    def decorator(fn):
        ret = task(*args, **kwargs)(close_db(fn))
        ret.call_local = fn
        return ret
    return decorator

Собственно вопрос по конструкции
ret = task(*args, **kwargs)(close_db(fn))
Вызываем функцию task передавая ей аргументы - а потом еще аргументом идет вызов функции. Как понять такую конструкцию , где почитать про такой двойной вызов ?
FishHook
в питоне всё есть объект. Класс, модуль, функция - это объекты интерпретатора. То есть функция - это равнозначная переменная. У вас етсь функция чей вызов возвращает другую функцию. И уже ту функцию вы и вызываете. Смотрите, есть функция А, она возвращает функцию Б. А = lambda: Б. Но “Б” это тоже функция, то есть вы можете сделать Б() - вызвать её. Уберите лишнее и А()() работает
VadimK
Суть понял, спасибо.
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