1. 程式人生 > 其它 >函式、引數

函式、引數

 

#為解決可讀性差,重複程式碼

#定義格式
"""
    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)#這裡實參的* 和 **為了標識傳給不同型別的形參