In [83]:
"a b c".split()
d = {'a': 5, 'b': 6}
def p_d(*args):
print args
p_d(*d)
a = [1,2,3]
b = [3,4]
a.extend(b)
a
Out[83]:
In [33]:
from functools import partial
app = {
'a': 5,
'b': True
}
def inject(dependencies=None):
def injection(F):
kwargs = dict([(item, app[item]) for item in dependencies])
def injected(x, a=None, b=None):
if a is not None:
kwargs.update(a=a)
if b is not None:
kwargs.update(b=b)
return F(x, **kwargs)
return injected
return injection
@inject(dependencies=('a','b'))
def func(x, a=None, b=None):
print "func called with {0},{1}".format(a, b)
func("zzz")
In [88]:
from functools import wraps
class App(object):
def __init__(self):
self.a=55
self.b=False
self.c="!!!"
def inject(self, *names_to_inject):
def _inject(func):
@wraps(func)
def injected(*args, **kwargs):
to_inject = dict([(name, getattr(self, name))
for name in names_to_inject])
to_inject.update(kwargs)
kwargs = to_inject
return func(**kwargs)
return injected
return _inject
app = App()
@app.inject('a', 'b')
def log_a_b(a=None, b=None, c=None):
print "a={0}, b={1}, c={2}".format(a, b, c)
print log_a_b.__name__
log_a_b(a=7, c="zzz")