python 可变参数 关键字参数_Python 函数内修改关键字参数**kw的安全性考虑

Python定义函数常常会使用关键字参数**kw来接收字典值。

基本语法def f(p1,p2,**kw)

**kw将接收0个或任意个含参数名的参数,这些关键字参数在函数内部会自动组合为一个字典。

示例def person(**kw)

for k in kw:

print k ,':', kw[k]

>>> person(name='Bob', age=35)

name:Bob

age:35

>>> kw = {'name': 'Bob', 'age': 35}

>>> person(**kw)

name:Bob

age:35

由于关键字参数**kw是可变的,我们在对关键字参数对应的字典做修改时,可能会犹豫下,对kw字典修改是否也修改了函数外的字典呢?

其实在函数内对关键字参数对应的字典做修改是安全的。

根据Python的函数定义,如果函数参数为关键字参数,它会新构建一个有序的map来接收关键字参数组合成字典。

示例def f(**kwargs):

print((id(kwargs), kwargs))

kwargs = {'foo': 'bar'}

print(id(kwargs))

# 140185018984344

f(**kwargs)

# (140185036822856, {'foo': 'bar'})

这个示例分别输出函数内的字典和函数外的字典id,你可以看到这两个id不相同。

所以说在函数内修改关键字参数映射的字典是安全的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值