1. 程式人生 > >python 引數傳遞[打包與解包問題]

python 引數傳遞[打包與解包問題]

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,是可以修改的