函數中傳入的參數是可變與不可變類型會怎樣?
- 可變類型,值可以改變:列表,字典
- 不可變類型,值不可以改變:數字,字元串,元組
問題1:在函數內部,針對參數使用賦值語句,會不會影響調用函數時傳遞的參數?---不會
注意:無論傳遞的參數是可變的還是不可變的,只要針對參數使用賦值語句,在函數內部修改局部變數的引用,不會影響到外部變數的引用.
def demo(num,num_list): print("函數內部") #賦值語句 num=200 num_list=[1,2,3] print(num) print(num_list) print("函數代碼執行完成")gl_num=90gl_list=[4,5,6]demo(gl_num,gl_list)print(gl_num)print(gl_list)
如果傳遞的函數是可變類型,在函數內部,使用方法修改了數據的內容,同樣會影響到外的數據.
def demo(num_list): print("函數內部") num_list.extend([1,2,3]) print(num_list) print("函數完成")gl_list=[4,6,8]demo(gl_list)print(gl_list)列印結果是:函數內部[4, 6, 8, 1, 2, 3]函數完成[4, 6, 8, 1, 2, 3]
看吧,神奇的事情發生了,好玩不.
不要懵,還有一個要注意哦.
def demo(num,num_list): print("函數開始") num+=num print(num) print(num_list) print("函數完成")gl_num=9gl_list=[1,2,3]demo(gl_num,gl_list)列印結果是:函數開始18[1, 2, 3]函數完成def demo(num,num_list): print("函數開始") num+=num #1.列表變數使用+不會做相加再賦值的操作! # num_list=num_list+num_list #2.本質上是在調用列表的extend方法 # num_list+=num_list #3.看一下extend方法,驗證上述結論 num_list.extend(num_list) print(num) print(num_list) print("函數完成")gl_num=9gl_list=[1,2,3]demo(gl_num,gl_list)列印結果是:函數開始18[1, 2, 3, 1, 2, 3]函數完成
推薦閱讀:
※操作工永遠是對的!錯的是管理!!
※面向項目學習編程--之前的廢話
※使用subst命令快速跳轉到工作間
※偽·從零開始學Python - 1.3 Python Shell的基本使用
※不太明白......[偶記]