+ 1
what is the purpose to keep the 1st parameter name ?is there any role of 1st arg 7 ,1st positional parameter name in this code ?
def foo(name, **kwds): return 'name' in kwds >>> foo(7, **{'name': 2}) Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: foo() got multiple values for argument 'name' >>>
6 Réponses
+ 2
what you do with foo(7,**{'name':2}) is equivalent to foo(name=7,name=2)
+ 2
explicit positional arguments (as opposed to optional: only a name) are required...
you cannot unpack a dict with a key equal to it if you provide a positional value, but you can pass it by providing its name or by unpacking a dict with a key with same name without providing the positional one:
foo(42)
foo(**{'name':42})
foo(name=42)
all three are equivalent and working ;)
+ 1
visph Yes I understand.
0
Manohar Yadav she doesn't pass the dictionary, she unpack it (and keys wich are not explictly declared in function signature are re-packed to another dictionary)
0
visph What do you mean by this ? "keys which are not explictly declared in function signature are re-packed to another dictionary."
0
function signature is the 'def' line: what make it unique, name and most important the argumznt list...
in your code example the 'explicitly declared' key/argument is the 'name' argument wich cannot be found as key in the kwds dictionary ;)