вложенная функция, возвращающая внешнюю функцию [python] - PullRequest
0 голосов
/ 08 ноября 2018

У меня есть общий шаблон, который выглядит как

def f(x):
  if x.type == 'Failure':
     # return `x` immediately without doing work
     return x
  else:
  # do stuff with x...
  return x

Я бы хотел абстрагировать шаблон if / else в отдельную функцию. Однако я хочу, чтобы эта функция при вызове изнутри f, чтобы немедленно возвращалась из f . Иначе он должен просто вернуть x в значение внутри f для дальнейшей обработки. Что-то вроде

def g(x):
  if x.type == 'Failure':
    global return x
  else:
    return x.value

def f(x):
  x_prime = g(x) # will return from f
                 # if x.type == 'Failure'
  # do some processing...
  return x_prime

Возможно ли это в Python?

1 Ответ

0 голосов
/ 08 ноября 2018

Я использую Validation из моей ветки из подкатегорий:

def fromSuccess(fn):
    """
    Decorator function. If the decorated function
    receives Success as input, it uses its value.
    However if it receives Failure, it returns
    the Failure without any processing.
    Arguments:
        fn :: Function
    Returns:
        Function
    """
    def wrapped(*args, **kwargs):
        d = kwargs.pop('d')
        if d.type == 'Failure':
            return d
        else:
            kwargs['d'] = d.value
        return fn(*args, **kwargs)
    return wrapped

@fromSuccess
def return_if_failure(d):
    return d * 10

return_if_failure(d = Failure(2)), return_if_failure(d = Success(2))

>>> (Failure(2), 20)
...