函數傳參的方法:
太基礎了,8說了
直接上重點
一、可變參數的傳遞
可變參數有:列表、集合、字典
直接上代碼:
a = [1, 2] def fun(a): print('傳入函數時a的值為:', a) a.insert(2, 3) #修改a print('函數改動后a的值為:', a) fun(a) #調用函數 print('調用函數后全局中a的值為:', a) 結果為: 傳入函數時a的值為: [1, 2] 函數改動后a的值為: [1, 2, 3] 調用函數后全局中a的值為: [1, 2, 3] #可以看到函數外部a的值被改變了
結論:
函數傳遞可變參數時,會將包括索引在內的整體傳遞進去,當函數內部對參數進行修改時,函數外部的參數也會被修改
注:
這里的修改指的是不會重新創建索引的那種修改,故賦值操作不屬於這種情況
二、不可變參數的傳遞
不可變參數有:數字、字符串、元組
上代碼:
a = 1 def fun(a): print('傳入函數時a的值為:', a) a = 2 #這里是通過重新賦值的方法修改,只是為了舉例,畢竟不可變參數沒有真正的修改方法 print('函數改動后a的值為:', a) fun(a) #調用函數 print('調用函數后全局中a的值為:', a) 結果為: 傳入函數時a的值為: 1 函數改動后a的值為: 2 調用函數后全局中a的值為: 1 #可以看到函數外部a的值並沒有改變
結論:
函數傳遞不可變參數時,只傳遞了值,當函數內部對參數進行修改時,其實只是重新創建了一個同名參數,函數對這個同名參數的操作並不會影響到函數外部的參數
注:
這里為了舉例使用的是重新賦值的方法,其實在這種情況下即使a是可變參數,全局中的a也不會改變,因為賦值操作會重新建立索引,相當於在函數內重新創建了同名參數