python dict update_Python - 关于方法参数和字典更新(dict.update())方法

初学Python,贻笑大方。

今天遇到一坑,涉及到字典(dict)作为参数传入方法内时的操作,和更新字典内容两方面内容。

首先第一点:

我们来对比一下一组代码:

代码A:

#添加默认字段

defsetInsertModel(opt_user_id, dic):#默认字段元组

common_dic ={'del_flg': consts.CommonFlg.COM_FLG_OFF.value,'creator_id': opt_user_id,'create_dt': DateUtils.getNow(),'updater_id': opt_user_id,'update_dt': DateUtils.getNow(),

}#添加默认字段

dic.update(common_dic)

代码B:

#添加默认字段

def setInsertModel(opt_user_id, **dic):#默认字段元组

common_dic ={'del_flg': consts.CommonFlg.COM_FLG_OFF.value,'creator_id': opt_user_id,'create_dt': DateUtils.getNow(),'updater_id': opt_user_id,'update_dt': DateUtils.getNow(),

}#添加默认字段

dic.update(common_dic)

仅仅是方法参数定义时加了双星号(**,代表收集到的参数在方法中作为元组使用),但是结果不同。

中间的代码就不贴出来了,省的丢人。下面是model更新后的结果:

第二条数据是代码B执行后的结果,而第一条与第三条数据则是代码A执行后的结果。这说明作为参数的dic,在代码A中并没有被修改。

现在作为初学者简单的认为是参数的作用域的问题,用双星号定义的字典,仅仅作为收集参数用的形参,作用域仅在本方法内部,出了方法体就没人认识这个dic的东西了;相反代码B中的dic就是原字典的引用,我对这个字典进行操作后,会直接作用到这个字典中,所以代码B会将默认的字段都添加到需要更新的字典中。如果说的不对,欢迎指教。

那么接下来第二点:

这个就真的比较小儿科了,还是来比较一段代码:

代码C:

#添加默认字段

defsetInsertModel(opt_user_id, dic):#默认字段元组

common_dic ={'del_flg': consts.CommonFlg.COM_FLG_OFF.value,'creator_id': opt_user_id,'create_dt': DateUtils.getNow(),'updater_id': opt_user_id,'update_dt': DateUtils.getNow(),

}#添加默认字段

dic.update(common_dic)

代码D:

#添加默认字段

defsetInsertModel(opt_user_id, dic):#默认字段元组

common_dic ={'del_flg': consts.CommonFlg.COM_FLG_OFF.value,'creator_id': opt_user_id,'create_dt': DateUtils.getNow(),'updater_id': opt_user_id,'update_dt': DateUtils.getNow(),

}#添加默认字段

dic =dic.update(common_dic)return dic

代码D在执行插入操作时直接报错了,TypeError:‘NoneType’。其实道理非常简单,因为dict.update()方法没有返回值,dic被赋了NoneType,当然报错了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值