初学Python,贻笑大方。

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

首先第一点:

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

  代码A:

# 添加默认字段
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)

  代码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:

# 添加默认字段
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)

  代码D:

# 添加默认字段
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 = dic.update(common_dic)return dic

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

转载于:https://www.cnblogs.com/cheminea/p/8583244.html

Python - 关于方法参数和字典更新(dict.update())方法相关推荐

  1. Python元组和字典的使用、使用字典的注意事项、字典查找数据、字典的增删改、字典的合并 update方法、字典的遍历

    1.元组的使用 count 和index方法 -元组和列表很像,都是用来保存多个数据: -使用一对小括号()来表示一个元组: -元组和列表的区别在于,列表是可变的,而元组是不可变数据类型: -由于它是 ...

  2. 【Java从零到架构师第③季】【26】SpringMVC-反射获取方法参数名_SpringMVC是如何获取方法的参数名的

    持续学习&持续更新中- 守破离 [Java从零到架构师第③季][26]SpringMVC-反射获取方法参数名_SpringMVC是如何获取方法的参数名的 利用反射获取方法的参数名 直接编译 修 ...

  3. 【python入门篇——11】字典(dict)详解

    1.定义 字典是一种可变的容器,可以存储任意类型的数据 字典中的每个数据都是用"键" (key) 进行索引,而不像序列可以用下标进行索引 字典中的数据没有先后关系,字典的存储是无序 ...

  4. 把一个字典的键值对加入到另一个字典中dict.update(dict2)

    描述 Python 字典(Dictionary) update() 函数把字典dict2的键/值对更新到dict里. update()方法语法: dict.update(dict2) 参数 dict2 ...

  5. java 注解 方法 参数_java在注解中绑定方法参数的解决方案

    我们有这样子的需求,需要记录用户操作某个方法的信息并记录到日志里面,例如,用户在保存和更新任务的时候,我们需要记录下用户的ip,具体是保存还是更新,调用的是哪个方法,保存和更新的任务名称以及操作是否成 ...

  6. java:axis2环境下获取方法参数名的另一种方法

    java本身提供的方法不能获取方法的参数名的,只能获取每个参数的类型 比如: public String concatString(String param1,String param2){retur ...

  7. 在Python中将列表转换为字典的10种方法

    Python数据结构 (Python Data Structures) Python lists and dictionaries are two data structures in Python ...

  8. python 编程开发 —— 字典(dict)介绍

    文档声明: 以下资料均属于本人在学习过程中产出的学习笔记,如果错误或者遗漏之处,请多多指正.并且该文档在后期会随着学习的深入不断补充完善.感谢各位的参考查看. 笔记资料仅供学习交流使用,转载请标明出处 ...

  9. python中字典类型中的item是什么-python中 字典类型内置方法

    python中 字典类型内置方法 一.字典(dict) ​ 1·. 存多个值,但是每一个值都有一个key与之对应.列如存在值有姓名:jiayi.年龄:18.身高:173 ​ 2.定义方式 ​ 在{}内 ...

最新文章

  1. 这些算法工程师,他们真的是太难了!
  2. UA MATH571A R语言回归分析实践 多元回归2 医疗费用的决定
  3. 男人25岁,别让“努力“毁了你的辉煌
  4. egg框架访问 Mysql 数据库 egg-mysql 增删改查
  5. jQuery firefox chrome IE 绑定mousewheel事件
  6. mysql all和distinct_mysql distinct 使用实例(过滤多余的重复记录)
  7. 【转载】mysql view prevents operation处理
  8. github网站进不去怎么办
  9. 开机显示输入最佳预设值_电脑显示输入最佳预设值并重新开机是什么意思
  10. 【U8】会计科目使用自定义项著辅助核算步骤及注意事项
  11. 计算机主机突然断电有什么影响,电脑突然断电对硬件有影响吗?电脑突然断电的危害...
  12. Confluence 6 设置一个空间主页
  13. html div 虚线边框样式,纯CSS实现渐变虚线框和边框滚动动画
  14. 当当网商品详情API接口(当当商品详情接口,当当商品评论接口,当当商品问答接口,当当抢购价接口,关键词搜索当当网商品接口)代码对接教程
  15. 密码学:流加密法与块加密法
  16. 实验六 医学图像的增强(二)
  17. Kingdian慧荣SM2256K AB主控固态硬盘卡住慢修复教程
  18. Json和Json解析
  19. win7计算机 我的文档,Win7系统优化:如何移动Win7我的文档保存位置
  20. DNSPod十问沈添:低代码将让程序员集体失业?

热门文章

  1. Mac 技术篇-Oracle数据库官方连接工具SQL Developer的安装与连接演示
  2. 5.1matlab数据统计分析(最大值、最小值、平均值、中值、和、积、累加和、累加积、标准差、相关系数、排序)
  3. Rotate List
  4. mysql会话命令_mysql常用命令(持续更新)
  5. 正则表达式三 :编译
  6. 第二十一讲 特征值和特征向量
  7. LaTeX提问技巧——MWE
  8. jmeter http并发测试时报错
  9. explian执行计划
  10. 怎么添加项目到SVN上面