python用kwargs调用一个函数

时间:2015-07-02 07:17:03

标签: python kwargs

我有一个功能:

def myfunc():
    kwargs = {}
    a = 1
    b = 2
    kwargs.update(a=a, b=b)
    newfunc(**kwargs)

和我的newfunc

def newfunc(**kwargs):
    print a

它没有给出1的值

怎么了?

4 个答案:

答案 0 :(得分:0)

两件事。

首先,kwargs中的myfunc参数是一个空字典,因此您不会传递任何参数。如果您想将ab的值传递给newfunc,您可以使用

kwargs = {'a':1, 'b':2}
newfunc(**kwargs)

newfunc(a=1, b=2)

在这两种情况下,您都会在'a'函数的kwargs dict中获得'b'newfunc

其次,您应该从kwargs中的newfunc词典中提取您的论点。像print kwargs.get('a')这样的东西就足够了。

答案 1 :(得分:0)

您忘记包含错误。该错误可能是NameErrora未定义。

您的代码有多重问题:

def myfunc():
    kwargs = {}
    a = 1
    b = 2

这不会更改字典kwargs。这只创建了两个新的本地名称ab。我想你想拥有的是:

    kwargs = {}
    kwargs["a"] = 1
    kwargs["b"] = 2

编辑:您的更新确实解决了此行上方的问题

然后:

def newfunc(**kwargs):
    print a

会给你一个错误,因为a应该来自哪里?

在这里使用**kwargs告诉python存储所有(以前没有吸收的)参数存储在新字典中。你想要的是:

def newfunc(a,b):
    print a

def newfunc(**kwargs):
    print kwargs["a"]

看一下你的代码,你似乎很难理解如何处理字典。如果您坐下来阅读有关python的dict

的教程,那么您提出的问题可能更容易让您自己回答

答案 2 :(得分:0)

您应该将yor变量添加到词典中,并在变量的位置打印项目。对我而言,您的代码应该写成:

def myfunc():
    kwargs = {'a': 1,
              'b': 2}
    newfunc(**kwargs)

def newfunc(**kwargs):
    print(kwargs['a'])

if(__name__ == '__main__'):
    myfunc()

或者你的newfunc应该包含你想用kwargs字典填充的参数,如:

def myfunc():
    kwargs = {'a': 1,
              'b': 2}
    newfunc(**kwargs)

def newfunc(a, b):
    print(a)

if(__name__ == '__main__'):
    myfunc()

希望有所帮助。

答案 3 :(得分:0)

因为你没有在字典中输入任何键值,你应该写下:

def newfunc(**kwargs):
    print kwargs["a"]

def myfunc():
    kwargs = {"a" :1, "b": 2}
    newfunc(**kwargs)

你可以参考这个帖子来更好地理解kwargs:Understanding kwargs in Python