开发者

Python: pass more than one keyword argument?

is there possible to pass more than one keyword argument to a function in pyt开发者_如何学编程hon?

foo(self, **kwarg)      # Want to pass one more keyword argument here


You only need one keyword-arguments parameter; it receives any number of keyword arguments.

def foo(**kwargs):
  return kwargs

>>> foo(bar=1, baz=2)
{'baz': 2, 'bar': 1}


I would write a function to do this for you

 def partition_mapping(mapping, keys):
     """ Return two dicts. The first one has key, value pair for any key from the keys
         argument that is in mapping and the second one has the other keys from              
         mapping
     """
     # This could be modified to take two sequences of keys and map them into two dicts
     # optionally returning a third dict for the leftovers
     d1 = {}
     d2 = {}
     keys = set(keys)
     for key, value in mapping.iteritems():
         if key in keys:
             d1[key] = value
         else:
             d2[key] = value
     return d1, d2

You can then use it like this

def func(**kwargs):
    kwargs1, kwargs2 = partition_mapping(kwargs, ("arg1", "arg2", "arg3"))

This will get them into two separate dicts. It doesn't make any sense for python to provide this behavior as you have to manually specify which dict you want them to end up in. Another alternative is to just manually specify it in the function definition

def func(arg1=None, arg2=None, arg3=None, **kwargs):
    # do stuff

Now you have one dict for the ones you don't specify and regular local variables for the ones you do want to name.


You cannot. But keyword arguments are dictionaries and when calling you can call as many keyword arguments as you like. They all will be captured in the single **kwarg. Can you explain a scenario where you would need more than one of those **kwarg in the function definition?

>>> def fun(a, **b):
...     print b.keys()
...     # b is dict here. You can do whatever you want.
...     
...     
>>> fun(10,key1=1,key2=2,key3=3)
['key3', 'key2', 'key1']


Maybe this helps. Can you clarify how the kw arguments are divided into the two dicts?

>>> def f(kw1, kw2):
...  print kw1
...  print kw2
... 
>>> f(dict(a=1,b=2), dict(c=3,d=4))
{'a': 1, 'b': 2}
{'c': 3, 'd': 4}
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜