Noah的學習筆記之Python篇:函數“可變長參數”


 

Noah的學習筆記之Python篇:

  1.裝飾器

  2.函數“可變長參數”

  3.命令行解析

 

 注:本文全原創,作者:Noah Zhang  (http://www.cnblogs.com/noahzn/)

 

  這次來聊聊Python中函數的“可變長參數”,在實際中經常會用到哦~

 

 一、什么是“可變長參數”

  “可變長參數”就是向一個函數傳入不定個數的參數。比如我寫一個函數:傳入一個學生參加各科目考試的成績,求平均分,如兩個學生分別傳入(92, 91, 88)和(88, 95),因為每個學生參加的考試個數不同,因此傳入的參數個數也就不同了,遇到這種情況,我們在定義函數的時候,可以使用“可變長參數”。

 

二、在定義函數時使用“可變長參數”

 

# 完整打印函數的可變參數
def func(*args, **kwargs):
    print(args)
    print(kwargs) 


func(1, 'hello', a=2, c='world')


>>>
(1, 'hello')
{'a': 2, 'c': 'world'}

  

  以上代碼定義了一個最簡單的分別接收兩種“可變長參數”的函數,一種是“非關鍵字參數”,數據結構為:元組注:元組不能被修改);另一種是“關鍵字函數”,數據結構為:字典

  此時,我們就可以依次傳入數個非關鍵字參數和數個關鍵字參數,不能混搭傳入~我們可以用如下這段代碼依次打印出接收到的參數:

# 依次打印函數的可變參數
def func(*args, **kwargs):
    for arg in args:
        print('arg:', arg)
    for value in kwargs:
        print('%s:' % value, kwargs[value])


func(1, 'hello', a=2, c='world')


>>>
arg: 1
arg: hello
a: 2
c: world

 

三、在調用函數時使用“可變長參數”

  我們也可以在調用函數時傳入一個“可變長參數”,如下所示:

 

def func(name1, name2, name3):
    print('第一個人:%s' % name1)
    print('第二個人:%s' % name2)
    print('第三個人:%s' % name3)


name_tuple1 = ('Mary', 'John', 'Jane')
name_tuple2 = ('Rose', 'Mike')
func(*name_tuple1)
func('Luna', *name_tuple2)


>>>
第一個人:Mary
第二個人:John
第三個人:Jane
第一個人:Luna
第二個人:Rose
第三個人:Mike

 

  在這段代碼中,我定義func函數的參數個數為3,所以請確保在調用該函數時傳入的參數數量也是3喲~

 

四、實際應用

#:假設傳入一個班級的名字、班級所獲榮譽,以及各位任課老師的名字和年齡
def welcome(name, *args, **kwargs):
    print('%s共獲得了%d項榮譽,分別是:' % (name, len(args)))
    for i in range(len(args)):
        print('%d. %s' % (i+1, args[i]))

    age_sum = 0  # 年齡和
    print('該班共有%d名老師,他們的名字和年齡如下:' % len(kwargs))
    for value in kwargs:
        age_sum += kwargs[value]
        print('%s: %d歲' % (value, kwargs[value]))
    print('老師們的平均年齡是%.1f歲\n' % (age_sum/len(kwargs)))


welcome('計算機1班', '校優秀班級', '最佳凝聚力', Mary=27, Peter=35, John=32)
welcome('軟件2班', '上海市優秀班級', '校合唱比賽冠軍', '最佳凝聚力', Peter=34, Rose=28, Hans=33)


>>>
計算機1班共獲得了2項榮譽,分別是:
1. 校優秀班級
2. 最佳凝聚力
該班共有3名老師,他們的名字和年齡如下:
Peter: 35歲
John: 32歲
Mary: 27歲
老師們的平均年齡是31.3歲

軟件2班共獲得了3項榮譽,分別是:
1. 上海市優秀班級
2. 校合唱比賽冠軍
3. 最佳凝聚力
該班共有3名老師,他們的名字和年齡如下:
Peter: 34歲
Rose: 28歲
Hans: 33歲
老師們的平均年齡是31.7歲

  

  這個例子也是自己編的,能幫助大家理解主題內容就好~


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM