我有一个功能:
def myfunc():
kwargs = {}
a = 1
b = 2
kwargs.update(a=a, b=b)
newfunc(**kwargs)
和我的newfunc
def newfunc(**kwargs):
print a
它没有给出1的值
怎么了?
答案 0 :(得分:0)
两件事。
首先,kwargs
中的myfunc
参数是一个空字典,因此您不会传递任何参数。如果您想将a
和b
的值传递给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)
您忘记包含错误。该错误可能是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
答案 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