函式、引數
阿新 • • 發佈:2022-03-29
#為解決可讀性差,重複程式碼 #定義格式 """ def 函式名(形參): 函式體 return 返回值/結束函式,多個值以元組形式返回 #執行 函式名(實參)#需要和函式形引數量一致 """ #1、示例 def my_len(OBJ): count = 0 for i in OBJ: count += 1 return count a = [1, 2, 3] print(my_len(a)) #2、關鍵字引數 直接給形參賦值, 但位置傳參一定在最後 def Test1(a, b, c): print(a, b, c) return a, b #Test1(1, 2, b = 3) #報錯,不能給中間形參關鍵字傳參 Test1(1, c = 2, b = 3) #可以,最後的關鍵字引數順序可變 #3、預設引數 def Test2(a, b, c = 110): #1、預設引數必須放在形參最後;2、不傳取預設,傳值覆蓋預設值 print(a, b, c) Test2(1, 2) #1 2 110 Test2(1, 2, 3) #1 2 3 #!!!函式的預設引數是可變資料型別時,無論使用多少次預設引數,都是同一個(共用) def L(a, list = []): list.append(a)return list list1 = L(10)#沒傳使用預設引數 list2 = L(123, [])#傳空列表後,預設引數被覆蓋 list3 = L('a')#沒傳仍然使用預設引數,當前預設引數為[10] print(list1, list2, list3)#[10, 'a'] [123] [10, 'a'] #4、動態引數,數量不確定或方便擴充套件,用 *args **kwargs(args和kwargs是約定俗成的寫法,不是必須用這兩個變數名) def Test3(*args, **kwargs): print("args", args)#(1, 2, 3)#接收位置引數,元組型別print("kwargs", kwargs)#{'x': 4, 'y': 5}#接收關鍵字引數,字典型別 Test3(1, 2, 3, x=4, y=5) #!!!動態引數*args接收位置引數時,必須放在其他引數位置後,關鍵字引數之前; """!!!同理,**kwargs 也必須放在其他關鍵字引數之後,所以傳參順序是 (位置引數, *args, 關鍵字引數, **kwargs)""" # def Test4(a, b, c='test',*args): def Test4(a, b, *args, c='test'): print(a, b, args, c) Test4(1, 2, 4, c='Test')#1 2 (4,) Test #例 def Test5(*args): sum = 0 for i in args: sum += i return sum print(Test5(1, 2, 3, 5, 8))#19
#在函式的定義中, * 是聚合物件,所以如上 *args 接收多個引數 #在函式執行時, * 是打散可迭代物件,如下: def Test6(*args, **kwargs): #接收位置引數,元組型別 print("args", args)#args (1, 2, 3, 4, 5, 'x') print("*args", *args)#*args 1 2 3 4 5 x #接收關鍵字引數,字典型別 print("kwargs", kwargs)#kwargs {'y': 5, 'z': 6} # print("**kwargs", **kwargs)#報錯,print()函式不支援關鍵字引數 a = [1, 2, 3] b = [4, 5] c = {'x': 4} d = {'y': 5} e = {'z': 6} Test6(*a, *b, *c, **d, **e)#這裡實參的* 和 **為了標識傳給不同型別的形參