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,固然報錯了。

相關文章
相關標籤/搜索