修改kwargs与修改函数内的** kwargs

时间:2016-01-29 14:59:14

标签: python python-3.x kwargs

在以下情况

def f(kwargs):
    kwargs['a'] = 44
    print('a: {}, b: {}'.format(kwargs['a'], kwargs['b']))

提供给f()的词典将按预期进行修改。

那是:

given_dict = {'a': 1, 'b': 2}
f(given_dict)           # prints     a: 44, b: 2
print(given_dict)       # prints     {'a': 44, 'b': 2}
                                            ^
                                            |__ changed

但是,使用下面的代码时,dict不会被修改:

def g(**kwargs):
    kwargs['a'] = 44    
    print('a: {}, b: {}'.format(kwargs['a'], kwargs['b']))

given_dict = {'a': 1, 'b': 2}
g(**given_dict)            # prints     a: 44, b: 2
print(given_dict)          # prints     {'a': 1, 'b': 2}
                                            ^
                                            |__ unchanged

为什么g()没有像f()那样修改给定的字典? 我期待kwargs['a'] = 44在两个函数中都会产生相同的效果。

0 个答案:

没有答案