1. 程式人生 > >6函式和變數

6函式和變數

函式定義 def 函式名(引數1,引數2.....): 函式體   用return 返回值 函式內return後面的程式碼不再執行   用來確定傳入引數型別 a = 1 isinstance(a,(int,float)) >>True   函式定義必須在函式呼叫前,但函式呼叫函式時可以無視順序,因為按照順序解釋程式碼時,函式define會存到記憶體,但不執行函式內部的程式碼,只有真正呼叫函式時才執行函式內的程式碼     可變型別:list dict (x+=x和x=x+x不同,在引數傳遞中後者改變了x的引用,而前者沒有) 不可變型別: 數字,字串 元祖(例如 int i = 1,i = 2,修改的是i的指向)   全域性變數可以在後面的程式碼使用, 區域性變數只能在函式使用   當局部變數和全域性變數名字相同時,python會優先使用區域性變數   在函式中修改全域性變數: 1.如果是可變型別,可以直接執行修改變數的值(或者引用,直接=) 2.本質上在函式中修改不可變型別的全域性變數是修改了變數的引用,需要加global宣告,不加則修改不了引用,預設呼叫區域性變量了 如果函式內區域性變數和全域性變數命名相同時,呼叫變數時,函式優先使用區域性變數   全域性變數定義在呼叫函式之前就行   函式返回多個引數 return a,b 用 x,y = test()接受 return a,b 用x = test()接受,則x為元祖tuple return [a,b] x = test()接受, x為list   函式引數預設 test(x,y,z = 10,p = 1) 且非預設引數必須在有預設引數之前 預設引數可以多個 當引數位置不確定時,可以指明引數名確認引數 例:test(x,..y=1,z) 呼叫時test(2,..y = 4,9)   不定長引數   def test(x,y,*args,**kwargs): sum = x + y for i in args : sum += i for i in kwargs.values(): sum += i print("和為%s"%sum) test(1,2,3,4,num1 = 1,num2 = 2)   *args,**kwargs分別表示不定長引數,和帶關鍵字的不定長引數,且命名可變 集合的拆包 nums = [3,4] nums2 = {"num1":1,"num2":2} test(1,2,*nums,**nums2) python中函式引數傳遞是引用傳遞(而不是值傳遞)。對於不可變型別,因為變數不能修改,所以運算不會影響實參,只是改變形參的引用。對於可變型別,函式體中的運算會改變實參的值。