400-650-7353
您所在的位置:首頁(yè) > IT干貨資料 > python > 【Python基礎(chǔ)知識(shí)】Python函數(shù)的可變位置參數(shù)和可變關(guān)鍵字參數(shù)

【Python基礎(chǔ)知識(shí)】Python函數(shù)的可變位置參數(shù)和可變關(guān)鍵字參數(shù)

  • 發(fā)布: python培訓(xùn)
  • 來源:python干貨資料
  • 2021-02-09 15:32:45
  • 閱讀()
  • 分享
  • 手機(jī)端入口

1)可變位置參數(shù)

在Python中,函數(shù)在定義時(shí)可以擁有任意數(shù)量的參數(shù),這種參數(shù)稱為可變參數(shù)?梢酝ㄟ^定義可變參數(shù),來接收調(diào)用函數(shù)時(shí)多余的參數(shù)?勺儏(shù)又分為可變位置參數(shù)和可變關(guān)鍵字參數(shù),它們的區(qū)別如下:

①可變位置參數(shù)用來接收調(diào)用函數(shù)時(shí)多余的位置參數(shù);在函數(shù)體內(nèi),可變位置參數(shù)是一個(gè)元組。

②可變關(guān)鍵字參數(shù)用來接收調(diào)用函數(shù)時(shí)多余的關(guān)鍵字參數(shù);在函數(shù)體內(nèi),可變關(guān)鍵字參數(shù)是一個(gè)字典。

可變位置參數(shù)是在普通的參數(shù)前面加一個(gè)星號(hào)“*”,一般命名為args(arguments的縮寫),但實(shí)際上它可以用任意合法的名稱:

  1. >>> def f(*args):   # *args是可變位置參數(shù) 
  2. ...     print(args)   # 打印args 
  3. ...     print(type(args))   # 打印args的類型 
  4. ...     for i in args:   # 迭代元組 
  5. ...         print(i) 
  6. ... 
  7. >>> f('Python'423.14
  8. ('Python'423.14
  9. <class 'tuple'
  10. Python 
  11. 42 
  12. 3.14 

由運(yùn)行結(jié)果可知,可變位置參數(shù)在函數(shù)體內(nèi)是一個(gè)元組。另外,函數(shù)體內(nèi)的args不需要加星號(hào)。

在定義函數(shù)時(shí),如果不確定所需要的參數(shù)個(gè)數(shù),那么可以使用可變參數(shù)。假設(shè)要寫一個(gè)算術(shù)加法運(yùn)算的程序,不使用可變參數(shù)時(shí),只能將確定個(gè)數(shù)的數(shù)字相加:

  1. >>> def add_numbers(a, b, c):   # 這個(gè)函數(shù)只能讓三個(gè)數(shù)字相加 
  2. ...     print(a + b + c) 
  3. ...  
  4. >>> add_numbers(123
  5. 6 

如果使用可變參數(shù),那么可以實(shí)現(xiàn)讓任意個(gè)數(shù)的數(shù)字相加:

  1. >>> def add_numbers(*numbers):  # 將可變位置參數(shù)命名為numbers 
  2. ...     sum = 0 
  3. ...     for i in numbers:   # 由于numbers是元組,因此,可以使用for循環(huán)迭代 
  4. ...         sum += i 
  5. ...     print(sum) 
  6. ...  
  7. >>> add_numbers(123456
  8. 21 
  9. >>> add_numbers(421925
  10. 86 
  11. >>> add_numbers()   # 可變位置參數(shù)也可以傳遞0個(gè)參數(shù) 
  12. 0 

可變位置參數(shù)可以與普通的參數(shù)混用。假設(shè)要打印一份水果店的公告,其中第一個(gè)參數(shù)是普通的參數(shù),代表水果店的名字,第二個(gè)參數(shù)是可變位置參數(shù),用來接收除了水果店名字之外的其他位置參數(shù):

  1. >>> def fruit_shop(shop_name, *fruits): 
  2. ...     print('{0}水果店開業(yè)啦!'.format(shop_name)) 
  3. ...     print('在售的水果有:'
  4. ...     for fruit in fruits: 
  5. ...         print(fruit) 
  6. ...  
  7. >>> fruit_shop('小明''蘋果''香蕉''西瓜'
  8. 小明水果店開業(yè)啦! 
  9. 在售的水果有: 
  10. 蘋果 
  11. 香蕉 
  12. 西瓜 

函數(shù)調(diào)用時(shí),'小明'被shop_name接收,剩余的值都被*fruits接收,并存儲(chǔ)在fruits元組中。

【Python基礎(chǔ)知識(shí)】Python函數(shù)的可變位置參數(shù)和可變關(guān)鍵字參數(shù)

2)可變關(guān)鍵字參數(shù)

可變關(guān)鍵字參數(shù)是在普通的參數(shù)前面加兩個(gè)星號(hào)“**”,一般命名為kwargs(keyword arguments的縮寫),但實(shí)際上它可以用任意合法的名稱:

  1. >>> def f(**kwargs):   # **kwargs是可變關(guān)鍵字參數(shù) 
  2. ...     print(kwargs) 
  3. ...     print(type(kwargs))   # 打印kwargs的類型 
  4. ...     for k, w in kwargs.items():   # 迭代字典 
  5. ...         print('{0}--{1}'.format(k, w)) 
  6. ...  
  7. >>> f(name='Ming', age=19)   # 使用關(guān)鍵字參數(shù)才能將值存儲(chǔ)到kwargs中 
  8. {'name''Ming''age'19
  9. <class 'dict'
  10. name--Ming 
  11. age--19 
  12. >>> f()   # 可變關(guān)鍵字參數(shù)也可以傳遞0個(gè)參數(shù) 
  13. {} 

可變關(guān)鍵字參數(shù)可以與普通的參數(shù)混用。假設(shè)在前面的“水果店”程序中,不僅打印水果的名稱,還打印水果的個(gè)數(shù):

  1. >>> def fruit_shop_v2(shop_name, **fruits): 
  2. ...     print('{0}水果店開業(yè)啦!'.format(shop_name)) 
  3. ...     print('在售的水果有:'
  4. ...     for fruit, count in fruits.items():   # 迭代字典 
  5. ...         print('{0}{1}個(gè)'.format(fruit, count)) 
  6. ...  
  7. >>> fruit_shop_v2(shop_name='小明',  蘋果=10, 香蕉=3, 橘子=201)   
  8. 小明水果店開業(yè)啦! 
  9. 在售的水果有: 
  10. 蘋果10個(gè) 
  11. 香蕉3個(gè) 
  12. 橘子201個(gè) 

下面是一個(gè)更復(fù)雜的“水果店”程序,四個(gè)參數(shù)中,shop_name代表商店名稱,open_time代表開業(yè)時(shí)間,*fruits代表水果種類,**other_info代表水果店還想打印的額外信息:

  1. >>> def fruit_shop_v3(shop_name, open_time='10月1日', *fruits, **other_info): 
  2. ...     print('{0}水果店將在{1}開業(yè)!'.format(shop_name, open_time)) 
  3. ...     if fruits: 
  4. ...         print('在售的水果有:'
  5. ...         for fruit in fruits: 
  6. ...             print(fruit) 
  7. ...     if other_info: 
  8. ...         print('以下是額外信息:'
  9. ...         for item, info in other_info.items(): 
  10. ...             print('{0}:{1}'.format(item, info)) 
  11. ... 
  12. >>> fruit_shop_v3('小明')   # shop_name既沒默認(rèn)值,又不是可變參數(shù),故不能缺省 
  13. 小明水果店將在101日開業(yè)! 
  14. >>> fruit_shop_v3('小明''1月1日')   # 提供shop_name和open_time 
  15. 小明水果店將在11日開業(yè)! 
  16. >>> fruit_shop_v3(open_time='1月1日')   # 如果不指定shop_name的值,會(huì)報(bào)錯(cuò) 
  17. Traceback (most recent call last): 
  18.   File "<stdin>", line 1in <module> 
  19. TypeError: fruit_shop_v3() missing 1 required positional argument: 'shop_name' 
  20. >>> fruit_shop_v3('小明''蘋果''香蕉''橘子')   
  21. 小明水果店將在蘋果開業(yè)! 
  22. 在售的水果有: 
  23. 香蕉 
  24. 橘子 
  25. >>> fruit_shop_v3('小明''10月1日''蘋果''香蕉''橘子'
  26. 小明水果店將在101日開業(yè)! 
  27. 在售的水果有: 
  28. 蘋果 
  29. 香蕉 
  30. 橘子 
  31. >>>  
  32. >>> fruit_shop_v3('小明''10月1日''蘋果''香蕉', 地址='北京市', 開店折扣='八折')   # 多余參數(shù)全部被**other_info接收 
  33. 小明水果店將在101日開業(yè)! 
  34. 在售的水果有: 
  35. 蘋果 
  36. 香蕉 
  37. 以下是額外信息: 
  38. 地址:北京市 
  39. 開店折扣:八折 

 

文章“【Python基礎(chǔ)知識(shí)】Python函數(shù)的可變位置參數(shù)和可變關(guān)鍵字參數(shù)”已幫助

>>本文地址:http://m.hqfphsz.com/zhuanye/2021/66399.html

THE END  

聲明:本站稿件版權(quán)均屬中公教育優(yōu)就業(yè)所有,未經(jīng)許可不得擅自轉(zhuǎn)載。

1 您的年齡

2 您的學(xué)歷

3 您更想做哪個(gè)方向的工作?

獲取測(cè)試結(jié)果
  • 大前端大前端
  • 大數(shù)據(jù)大數(shù)據(jù)
  • 互聯(lián)網(wǎng)營(yíng)銷互聯(lián)網(wǎng)營(yíng)銷
  • JavaJava
  • Linux云計(jì)算Linux
  • Python+人工智能Python
  • 嵌入式物聯(lián)網(wǎng)嵌入式
  • 全域電商運(yùn)營(yíng)全域電商運(yùn)營(yíng)
  • 軟件測(cè)試軟件測(cè)試
  • 室內(nèi)設(shè)計(jì)室內(nèi)設(shè)計(jì)
  • 平面設(shè)計(jì)平面設(shè)計(jì)
  • 電商設(shè)計(jì)電商設(shè)計(jì)
  • 網(wǎng)頁(yè)設(shè)計(jì)網(wǎng)頁(yè)設(shè)計(jì)
  • 全鏈路UI/UE設(shè)計(jì)UI設(shè)計(jì)
  • VR/AR游戲開發(fā)VR/AR
  • 網(wǎng)絡(luò)安全網(wǎng)絡(luò)安全
  • 新媒體與短視頻運(yùn)營(yíng)新媒體
  • 直播帶貨直播帶貨
  • 智能機(jī)器人軟件開發(fā)智能機(jī)器人
 

快速通道fast track

近期開班時(shí)間TIME