当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《将字典作为关键字参数传递给python中的函数》经验,为你挑选了4个好方法。

我想使用字典在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)

这可能吗?



1> Dave Hillier..:

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

所以我的例子变成:

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


如果你想要这个帮助别人,你应该改写你的问题:问题不是传递字典,你想要的是将字典变成关键字参数
值得注意的是,您还可以将列表解压缩到位置参数:f2(*[1,2])
"dereference":在这个Python上下文中,通常的术语是"解包".:)
这很好,只是将它与argparse/__ dict__一起使用,使命令行参数直接解析为类对象的选项变得非常容易.

2> David Parks..:

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

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

    不能覆盖字典中已有的参数

    字典不能包含不在函数中的参数.

每个例子:

In[1]: def myfunc(a=1, b=2):
In[2]:    print(a, b)

In[3]: mydict = {'a': 100, 'b': 200}

In[4]: myfunc(**mydict)
100 200

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

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

数字2:您不能覆盖字典中已有的参数

In[7]: mydict = {'a': 100, 'b': 200}
In[8]: myfunc(a=3, **mydict)

TypeError: myfunc() got multiple values for keyword argument 'a'

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

In[9]:  mydict = {'a': 100, 'b': 200, 'c': 300}
In[10]: myfunc(**mydict)

TypeError: myfunc() got an unexpected keyword argument 'c'


使用print.format解压缩特别有用.例如:`'hello {greeting} {name}'.format(**{'name':'Andrew','greeting':'Mr'})`
@spencer解决方案已添加到答案中。

3> llimllib..:

在python中,这称为"解包",您可以在教程中找到它的一些内容.我同意,它的文档很糟糕,特别是因为它的幻想是多么有用.


最好将链接的相关内容复制到您的答案中,而不是依赖链接存活直到时间结束.
@Richard这是对网络的深刻哲学观点,我不能更加不同意这一点!唉,我在这里没有足够的空间来分享我的精彩证明......

4> Patrick Harr..:

在这里-可以进行其他任何迭代:

d = {'param' : 'test'}

def f(dictionary):
    for key in dictionary:
        print key

f(d)

推荐阅读
ar_wen2402851455
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有