可接受任意数量参数的函数
生活随笔
收集整理的這篇文章主要介紹了
可接受任意数量参数的函数
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
問題1:
假如我們想編寫一個可以接受任意數量參數的函數
解決思路:
我們可以編寫一個可接受任意數量的位置參數的函數,它是以*開頭的參數。
下面是示例:
def avg(first,*rest):return (first+sum(rest))/(1+len(rest))print(avg(2,5)) -->3.5 print(avg(3,5,6,7,8)) -->5.8在上面的代碼中,rest是一個元組,這個元組包含了其他傳遞過來的位置參數,在計算過程中會被當做一個序列來處理,而*則是起解參的作用。
下面再舉一個簡單的例子:
def fun(*args):sum=0for i in args:sum+=iprint(sum) fun(3,4,5) #--> 12 fun(5,8,9,6,7) #--> 35問題2:
如果想要編寫一個接受任意數量的關鍵字參數的函數呢?可以用以****開頭**的參數。
下面是示例:
def fun(x,*args,**kwargs):print(x)print(args)print(kwargs)fun(1,2,a=20,b=50,c=80)輸出結果:
1 (2,) {'a': 20, 'b': 50, 'c': 80}上面的示例中,涉及到參數的混合使用,*args是位置參數,**kwargs是關鍵字參數,是以字典的形式傳遞的。
為了幫助理解,我們再舉一個例子:
import html #導入html模塊 def make_elements(name,value,**attrs):keyvals=['%s="%s"'% item for item in attrs.items()] #列表推導式# join() 用于將序列中的元素以指定的字符連接生成一個新的字符串attr_str=' '.join(keyvals) element='<{name} {attrs}>{value}</{name}>'.format(name=name,attrs=attr_str,value=html.escape(value) )return elementprint(make_elements('item','Alia',size='large',quantity=6)) print(make_elements('p','<span>'))運行結果:
<item size="large"quantity="6">Alia</item> <p ><span></p>問題3
在函數定義中,以 * 開頭的參數只能作為最后一個位置參數出現,而以 ** 開頭的參數只能作為最后一個參數的出現。在函數定義中存在一個很微妙的特性,那就是在 * 開頭的參數后面仍然可以有其他的參數出現。
def a(x,*args,y)passdef b(x,*args,y,**kwargs)pass我們把這樣的參數稱之為 keyword-only參數(就是出現在*args之后的參數只能作為關鍵字參數使用)
總結
以上是生活随笔為你收集整理的可接受任意数量参数的函数的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Mysql数据库中的as和distinc
- 下一篇: Mongodb中$inc自增,自减的操作