繁体   English   中英

python用kwargs调用一个函数

[英]python call a function with kwargs

我有一个功能:

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

还有我的新功能

def newfunc(**kwargs):
    print a

它没有给出 1 的值

怎么了 ?

这是因为您没有在字典中放置任何键、值,您应该这样写:

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

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

您可以参考此线程以更好地理解 kwargs: Understanding kwargs in Python

两件事情。

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

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

或者

newfunc(a=1, b=2)

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

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

您忘记包含错误。 Error 本来是一个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的教程,也许您提出的问题会更容易回答自己

您应该将 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()

希望有帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM