代码之家  ›  专栏  ›  技术社区  ›  flybywire

如何向接受**Kwargs的函数发送字典?

  •  33
  • flybywire  · 技术社区  · 15 年前

    我有一个接受通配符关键字参数的函数:

    def func(**kargs):
        doA
        doB
    

    我怎么给它发字典?

    4 回复  |  直到 7 年前
        1
  •  56
  •   nosklo    15 年前

    只使用 func(**some_dict) 叫它。

    记录于 section 4.7.4 of python tutorial .

    请注意 相同的 dict 传递到函数中。创建了一个新副本,因此 some_dict is not kwargs .

        2
  •  8
  •   edvald    15 年前

    你的问题并不完全清楚,但如果你想通过 dict 通过 kwargs ,您只需将该dict作为另一个dict的一部分,如下所示:

    my_dict = {}                       #the dict you want to pass to func
    kwargs  = {'my_dict': my_dict }    #the keyword argument container
    func(**kwargs)                     #calling the function
    

    那你就可以抓住 my_dict 在函数中:

    def func(**kwargs):
        my_dict = kwargs.get('my_dict')
    

    或者…

    def func(my_dict, **kwargs):
        #reference my_dict directly from here
        my_dict['new_key'] = 1234
    

    当我将相同的选项集传递给不同的函数时,我经常使用后者,但有些函数只使用某些选项(我希望这是有意义的…)。 当然,有很多方法可以解决这个问题。如果你详细阐述一下你的问题,我们很可能会帮助你更好。

        3
  •  5
  •   John La Rooy    15 年前

    func(**mydict)

    这意味着函数内部的kwargs=mydict

    mydict的所有键都必须是字符串

        4
  •  1
  •   SamuelN    7 年前

    对于python 3.6,只需将**放在字典名称之前

    def lol(**kwargs):
        for i in kwargs:
            print(i)
    
    my_dict = {
        "s": 1,
        "a": 2,
        "l": 3
    }
    
    lol(**my_dict)