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

初学Python,贻笑大方。spa

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

首先第一点:blog

  咱们来对比一下一组代码:作用域

  代码A:get

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

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

  仅仅是方法参数定义时加了双星号(**,表明收集到的参数在方法中做为元组使用),可是结果不一样。date

  中间的代码就不贴出来了,省的丢人。下面是model更新后的结果: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,固然报错了。

相关文章
相关标签/搜索