回顧 一、參數的種類: 1、靜態參數: (1)、普通參數:嚴格按照順序,將實際參數複製給形式參數。 (2)、預設參數:一定要放在參數列的最後(即普通參數後面)。 註意: 給預設參數傳參,會被覆蓋掉(例如:XX = OK被BB覆蓋) 預設參數一定要放到,所有參數的末尾否則報錯。 (3)、指定參數:講實 ...
回顧
一、參數的種類: 1、靜態參數: (1)、普通參數:嚴格按照順序,將實際參數複製給形式參數。 (2)、預設參數:一定要放在參數列的最後(即普通參數後面)。 註意: 給預設參數傳參,會被覆蓋掉(例如:XX = OK被BB覆蓋) 預設參數一定要放到,所有參數的末尾否則報錯。 (3)、指定參數:講實際參數複製給指定的形式參數。 2、動態參數: (1)、*args: 把N個實參賦值給形參,並轉化為元祖。 f(*[1,22,33,44,55]) (2)、**kwargs:把N個關鍵字參數轉換成字典額方式。(關鍵字=key) f1(**{''k1":''v1","k2":"v2"}) (3)、萬能參數:def f1(*args **kwargs)動態參數
一、* : 接受N個位置參數,轉化為元祖的形式:(*args) 實例1、實參無論傳輸的是什麼數據類型,都會視為一個元素,並轉化成元祖。1 def f1(*args): 2 print(args,type(args)) 3 4 f1(11) 5 6 li = [11,22,33,44] 7 f1(li) 8 f1(li,'dy','aa','bb','cc') 9 10 11 顯示結果: 12 (11,) <class 'tuple'> 13 ([11, 22, 33, 44],) <class 'tuple'> 14 ([11, 22, 33, 44], 'dy', 'aa', 'bb', 'cc') <class 'tuple'>
實例2、將列表裡面的每一個元素,都將轉化到元祖的元素裡面:(可接收“,”的類型)
def f1(*args): print(args,type(args)) li = [11,22,33,44] f1(*li) a = "Alex" f1(*a) 顯示結果: (11, 22, 33, 44) <class 'tuple'> ('A', 'l', 'e', 'x') <class 'tuple'> 註意:實際是按照每個元素做了一次for 迴圈
二、 ** : **kwargs:把N個關鍵字參數轉換成字典額方式。 在傳值的時候,只能用“key:value”的方式進行傳值 實例1、必須指定一個key=value作為字典中的key:value
def f1(**kwargs): print(kwargs,type(kwargs)) f1(n1="alex",n2=18) {'n2': 18, 'n1': 'alex'} <class 'dict'>
實例2:可以結合字典變數傳輸一個鍵值對
1 def f1(**kwargs): 2 print(kwargs,type(kwargs)) 3 4 5 dic = {'k1':'v1','k2':'v2'} 6 f1(kk=dic) 7 8 9 {'kk': {'k2': 'v2', 'k1': 'v1'}} <class 'dict'>
實例3:直接的賦值,不需要做變動
1 def f1(**kwargs): 2 print(kwargs,type(kwargs)) 3 4 5 dic = {'k1':'v1','k2':'v2'} 6 f1(**dic) 7 f1(dic) 8 9 10 {'k2': 'v2', 'k1': 'v1'} <class 'dict'> 11 Traceback (most recent call last): 12 File "D:/軟體/pychar/data/day3/test.py", line 22, in <module> 13 f1(dic) 14 TypeError: f1() takes 0 positional arguments but 1 was given 15 16 17 註意:如果不加**傳值變數時就會報錯。
三、萬能參數: 實例1:一個星的在前面,兩個星的在後面
1 def f1(*args,**kwargs): 2 print(args) 3 print(kwargs) 4 5 f1(11,22,33,44,k1="v1",k2="v2") 6 7 8 顯示結果: 9 (11, 22, 33, 44) 10 {'k2': 'v2', 'k1': 'v1'}