2015-07-02 248 views
-3

功能我有一个函数:蟒蛇调用与kwargs

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

和我newfunc

def newfunc(**kwargs): 
    print a 

它不给的是1

什么错的价值?

+4

是什么给你呢?错误,对吧?该错误包含一个重要提示:仅仅因为您在函数签名中声明了'kwargs'不会让所有元素突然出现在您的作用域中。 –

+2

你为什么期望'a = 1'对'kwargs'有任何影响? – user2357112

+0

'kwargs'收到一本字典。 – Sam

回答

0

两件事情。

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

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

newfunc(a=1, b=2) 

在这两种情况下,你会在newfunc的kwargs字典得到'a''b'功能。

其次,你应该在newfunckwargs字典中提取你的论点。像print kwargs.get('a')应该就够了。

0

你忘了包括错误。错误应该是未定义的NameError,a

有许多东西你的代码错误:

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

+0

应该使用'def newfunc(a,b)'来工作。 – bereal

+0

@bereal:你是对的,改变了。 –

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() 

希望有所帮助。

0

,那是因为你没有把任何按键,在你的字典值,你应该写的是:

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

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

你可以参照这个线程了解kwargs更好:Understanding kwargs in Python

+0

还是错的; '打印一个'将不知道应该从哪里取出'a'。 –

+0

我没有看到他在这里也犯了一个错误,它被纠正了! –

+0

好得多:)谢谢! –