python 引數傳遞[打包與解包問題]
阿新 • • 發佈:2019-02-08
1.
傳遞引數時,可以傳遞基於引數名的字典f(**param_dict)
也可以傳遞基於位置的列表f(*param_list)
2.獲取引數列表
對於函式,可以直接在開頭param_dict=locals()
獲取引數字典
對於方法(類、例項),獲取的引數列表還額外含有cls、self項需要移除
可以用如下函式無副作用地得到純潔的引數字典
def remove_key(dic,key):
return {_key:dic[_key] for _key in dic if _key!=key}
3.關於locals、globals()的說明
globals是關於全域性模組級的識別符號字典
locals是區域性的。
但globals可以直接修改(或說修改對全域性識別符號有效)
locals()雖然也可以賦值,但賦值是無效的(按理說應該報錯才對。。。)
或說
預設的情況下下,globals()是可以直接用dict來操作的,但是locals()並不一樣,可以先認為locals()是一個只讀的dict(或者是沒有寫回作用的dict),只能知道你當前的程式碼的區域性變數,但是無法通過修改locals() 使之生效
如果用exec在執行程式碼時,指定一個dict作為這這段程式碼的locals,是可以修改的