Reputation: 15718
I have a common pattern that goes like
def f(x):
if x.type == 'Failure':
# return `x` immediately without doing work
return x
else:
# do stuff with x...
return x
I would like to abstract the if/else pattern into a stand alone function. However I want that function, when called from inside f
, to return from f immediately. Else it should just return x to a value inside f for further processing. Something like
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
Is this possible in Python?
Upvotes: 1
Views: 1888
Reputation: 15718
I'm using Validation
from my branch of pycategories:
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)
Upvotes: 2