python - Using variable length argument lists and named parameters together -
python - Using variable length argument lists and named parameters together -
i need help figuring out pythons *args , **kwargs. it's simple haven't entire wrapped head around them. here's 1 of scenarios that's bewildering me.
i have 2 functions mainfunc , wrapperfunc (which wrapper function main function). looks this.
def mainfunc(fname=none, lname=none): print 'firstname: ' + fname print 'lastname: ' + lname def wrapperfunc(uname, *args): print uname mainfunc(*args) i can phone call wrapperfunc this:
wrapperfunc('j.doe', 'john', 'doe') in method, 3 parameters positional. since j.doe comes uname, other 2 params can accessed *args
..but possible pass of params wrapperfunc dict can still access uname within wrapperfunc straight , pass remaining positional parameters mainfunc. next snippet:
params = {'uname':'j.doe'} wrapperfunc(**params, 'john', 'doe') i want access named parameters straight within wrapperfunc pass positional parameters mainfunc.
keyword arguments must come after position arguments in python.
params = {'uname':'j.doe'} wrapperfunc('john', 'doe', **params) will pass keyword arguments after 2 positional arguments,
if want @ argument, otherwise phone call normally, do:
def wrapper(*args, **kwargs): print kwargs["uname"] homecoming mainfunc(*args, **kwargs) you can generalize work on function want decorator.
def wrapper(f): def wrapped(*args, **kwargs): print kwargs["uname"] homecoming mainfunc(*args, **kwargs) homecoming wrapped @wrapper def foo(uname="test"): homecoming uname + "bar" # @decorator equivalent `foo = wrapper(foo)` python
Comments
Post a Comment