[英]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
参数是一个空字典,因此您不会传递任何参数。 如果要将a
和b
的值传递给newfunc
,可以使用
kwargs = {'a':1, 'b':2}
newfunc(**kwargs)
或者
newfunc(a=1, b=2)
在这两种情况下,您都会在newfunc
函数的 kwargs 字典中得到'a'
和'b'
。
其次,您应该从newfunc
的kwargs
字典中提取您的论点。 像print kwargs.get('a')
这样的东西就足够了。
您忘记包含错误。 Error 本来是一个NameError
, a
未定义的。
您的代码有很多问题:
def myfunc():
kwargs = {}
a = 1
b = 2
这不会改变字典kwargs
。 这只是创建了两个新的本地名称a
和b
。 我想你想要的是:
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.