flexibility when you need it
pip install ambiguous
from ambiguous import decorator
@decorator
def power(fn, exponent=2):
'''take function results and raise to an exponent'''
return lambda x: fn(x) ** exponent
@power
def squared(x): return x
squared(2)
> 4
@power(exponent=3)
def cubed(x): return x
cubed(2)
> 8
from ambiguous import thing_or_things
@thing_or_things
def itself(args):
return { x : x for x in args }
itself(1)
> 1
itself([1, 2])
> { 1 : 1, 2 : 2 }
# specify which argument
@thing_or_things('args')
def prefix(prefix, args):
return { x : "%s_%s" % (prefix, x) for x in args }
prefix('abc', [1, 2])
> { 1 : 'abc_1', 2 : 'abc_2' }
import ambiguous
@ambiguous
def foo():
return 'foo'
# the usual
foo()
> 'foo'
# ?!?
foo
> 'foo'
foo + 'abc'
> 'fooabc'