6函式和變數
阿新 • • 發佈:2018-11-04
函式定義
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中函式引數傳遞是引用傳遞(而不是值傳遞)。對於不可變型別,因為變數不能修改,所以運算不會影響實參,只是改變形參的引用。對於可變型別,函式體中的運算會改變實參的值。