python函式傳參不改變傳入變數值
阿新 • • 發佈:2021-11-22
今天寫用例遇到一個問題,困擾了好一會
問題描述:
介面的api定義在yaml檔案中,裡面有介面的apiurl,定義為/testapi,呼叫時會進行域名拼接,重新賦值給apiurl,使用資料驅動第一次執行完,interface["url"]被賦值修改為域名+apiurl,第二次呼叫介面報錯
如圖為api層呼叫makeInterface函式,傳入interface這個json,通過makeInterface函式會對請求url等進行拼接
在一個case中使用了資料驅動進行呼叫,第一次執行完,interface["url"]被賦值修改為域名+apiurl,第二次呼叫介面報錯
這個原因是因為python存在可變引數和不可變引數,只有函式引數傳入的是不可變引數,函式中的呼叫不會改變原引數變數值,否則,函式中對變數值的修改會改變原變數的值
- 不可變物件:Number ,String , Tuple,bool
- 可變物件: List , Set , Dictionary是可以改變內部的元素
如果想要函式中不對可變物件的原引數值進行修改可以使用copy.deepcopy()
desinterface = copy.deepcopy(interface)