1. 程式人生 > 其它 >python函式傳參不改變傳入變數值

python函式傳參不改變傳入變數值

  今天寫用例遇到一個問題,困擾了好一會

問題描述:

  介面的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)