首页 文章

将字典传递给python中的函数作为关键字参数

提问于
浏览
259

我想使用字典在python中调用函数 .

这是一些代码:

d = dict(param='test')

def f(param):
    print param

f(d)

这打印 {'param': 'test'} 但我想要打印 test .

我希望它能以更多参数的方式工作:

d = dict(p1=1, p2=2)
def f2(p1,p2):
    print p1, p2
f2(d)

这可能吗?

4 回答

  • 414

    最后为自己想出来了 . 这很简单,我只是缺少**运算符来解压缩字典

    所以我的例子变成:

    d = dict(p1=1, p2=2)
    def f2(p1,p2):
        print p1, p2
    f2(**d)
    
  • 3

    一些可能有助于了解的额外细节(在阅读本文并进行测试后我遇到的问题):

    • 该函数可以包含未包含在字典中的参数

    • 您无法覆盖字典中已有的参数

    • 字典不能包含函数中没有的参数 .

    Examples of each:

    def mytest(a=4, b=2):
        print a, b
    

    Number 1: 该函数可以包含未包含在字典中的参数

    In[6]: mydict = {'a': 100}
    In[7]: mytest(**mydict)
    100 2
    

    Number 2: 您无法覆盖字典中已有的参数

    In[8]: mydict = {'a': 100, 'b': 200}
    In[9]: mytest(a=3, **mydict)
    
    TypeError: mytest() got multiple values for keyword argument 'a'
    

    Number 3: 字典不能包含函数中没有的参数 .

    In[10]: mydict = {'a': 100, 'b': 200, 'c': 300}
    In[11]: mytest(**mydict)
    
    TypeError: mytest() got an unexpected keyword argument 'c'
    
  • 29

    在python中,这被称为"unpacking",您可以在tutorial中找到它的一些信息 . 我同意,它的文档很糟糕,特别是因为它有多么奇特的用处 .

  • 56

    在这里你去 - 只是任何其他迭代:

    d = {'param' : 'test'}
    
    def f(dictionary):
        for key in dictionary:
            print key
    
    f(d)
    

相关问题