函數中傳入的參數是可變與不可變類型會怎樣?

  1. 可變類型,值可以改變:列表,字典
  2. 不可變類型,值不可以改變:數字,字元串,元組

問題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的基本使用
不太明白......[偶記]

TAG:函數 | 編程 | Python開發 |