武道之路-煉體期五重天,之路五重
函數:
作用:代碼重用性,資料一致性,可移植和擴充。
在python3.x中 過程和函數都是 def 函數名(形參): 如此定義,而區別是函數有return 傳回值,而過程沒有,但是預設返回None,return 可以返回多個值,用逗號隔開(實際上是一個元組),return 還有結束函數啟動並執行作用。
函數調用:先定義函數,對應傳參才能調用(一般定義的形參個數必須大於等於傳入的實參個數,因為可能會有預設參數,參數組會除外,即是 *args(元組),**kwargs(字典)),傳參有位置傳參和關鍵字傳參,
參數組:主要用於不確定實參傳入個數時,或是直接想傳入元組或是字典。
預設參數:形參位置有預設值,不傳此位置的參數,會根據預設值計算,否則按傳入的計算
例: def test(x,y,z):
''' 一般這裡寫注釋'''
print(x,'---',y,'---',z)
return 'test----'
位置傳參調用: test(2,4,5)->一一對應x,y,z
關鍵字傳參:test(y=2,x=4,z=8),找到對應的形參名並賦值
當混用二者時,位置傳參在前面(必須對應傳參才能調用) 如: test(2,z=6,y=3)
*args 如:
def test1(x,*args):
print(x,'---',args)
return 'test1----'
可test1(2,4,5,6)->x=2 args:(2,4,6); 即是把多餘的位置傳參變成元組
還可test1(2)->x=2,args:(),不傳為預設空元組,test1(x=3,*[2])->x=3,args:(3,);test1(6,*(2,5))->x=6,args:(2,5)
**kwargs 如:
def test3(x,y=6,**kwargs):
print(x,'---',y,'---',kwargs)
return '222'
test3(6,name='ddd',kk='gg')->x=6,y預設為6,kwargs位{‘name’:'dd','kk':'gg'},即是把對應多的關鍵字傳參變成key=>value對應的字典,注意:需要傳入字典的key最好不要和其它形參相同名,不然會報多傳的錯誤的。
test3(y=3,x=5,mm='fff')->x=5,y=3,kwargs:{'mm':'fff'};test3(7,1)->x=7,y=1,kwargs:{};test3(x=3,3,**{'name':'55'})->x=3,y=3,kwargs:{'name':'55'}
3.x 全域變數及局部變數:
全域變數:一般在程式頂級定義的變數就是全域變數,而在子程式(一般是函數)裡定義的變數一般是局部變數,如果同名,在局部範圍裡局部變數起作用,反之亦然。
當全域變數是比較複雜的類型(一般是列表,字典,集合)時,在函數中是可以直接修改了全域變數
當全域變數是單一類型(字元,數字等)時,在函數中可用 global 重新定義全域變數名 就可修改(一般不建議如此,因為可能不知道函數被調用幾次)
在函數內可定義全域變數(直接 global 變數名),一般不建議如此。