淺談function(函數(shù))中的動態(tài)參數(shù)
我們可向函數(shù)傳遞動態(tài)參數(shù),*args,**kwargs,首先我們來看*args,示例如下:
1.show(*args)
def show(*args): print(args,type(args)) #以元組的形式向列表傳遞參數(shù) show(11,22,33,44,55,66)
首先我們定義了一個函數(shù),函數(shù)show(*args)里面的*args可以接收動態(tài)參數(shù),這里我們接收一個元組形式的參數(shù),我們可以向show()里面?zhèn)鬟f很多參數(shù),函數(shù)默認(rèn)把這些參數(shù)作為一個元組進(jìn)行接收。
2.show(**args)
def show(**kwargs): print(kwargs,type(kwargs)) #以字典的形式向函數(shù)傳遞參數(shù) show(k1=80,k2="alex")
由上面代碼可以看出,**kwargs是以字典的形式接收參數(shù)的,我們知道,字典是由鍵-值對組成的,key-value,因而我們必須向里面?zhèn)魅腈I-值對的參數(shù)形式才能夠接收,因此我們在里面?zhèn)魅肓藚?shù)k1=80,k2="alex".這樣生成了一個字典,從代碼可以看出來。
3.show(k,*args)
def show(k,*args):
print(k,type(k))
print(args,type(args))
show([11,22],33,44,55,88)
運(yùn)行結(jié)果如下:
[11, 22] <class 'list'> (33, 44, 55, 88) <class 'tuple'>
由上面代碼可以看出,我們向函數(shù)定義了兩個參數(shù),一個是k,一個是*args,我們知道,形參k只能接收一個對象參數(shù),*args可以接收多個參數(shù)并且放在一個元組中,下面我們向函數(shù)傳遞了多個參數(shù),看是如何接收的。從運(yùn)行結(jié)果(1)可以看出,形參k接收了參數(shù)[11,22];而后面輸入的值傳遞給了*args,并在存放在一個列表中。
4.show(*args,**kwargs)
只要函數(shù)有這兩個參數(shù)那么,可以傳遞任何形式的實(shí)參進(jìn)來,因?yàn)榭梢越邮杖我庑问降膮?shù),但是我們知道,字典必須是由鍵值對組成,傳遞的參數(shù)要滿足key=value的格式,否則會報(bào)錯。這點(diǎn)一定要記得,Python中默認(rèn)給字典傳遞參數(shù)的方法就是鍵-值對。
def show(*args,**kwargs): print(args,type(args)) print(kwargs,type(kwargs)) show(123,"alex",666,alex="sb",nanyang="degnzhou")
運(yùn)行結(jié)果如下:
(123, 'alex', 666) <class 'tuple'> {'nanyang': 'degnzhou', 'alex': 'sb'} <class 'dict'>
我們可以看到,前面的元素被放到了一個元組tuple中,后面的元素被放到了一個字典dict中,但是我們一定要記得,*args,一定要在**kwargs前面,不然會報(bào)錯,順序一定是單個參數(shù),動態(tài)元組,動態(tài)字典方式。
下面我們來看一個實(shí)例:
def show(*args,**kwargs): print(args,type(args)) print(kwargs,type(kwargs)) l = [11,22,33,44] d = {"n1":88,"alex":"sb"} #我們想把列表l傳遞給形參*args,把字典傳遞給形參**kwargs,看下面方式是否可以 show(l,d) (1)
#如果向?qū)崿F(xiàn)上面功能,要進(jìn)行表示,指定把哪個參數(shù)傳遞給形參*args,另一個參數(shù)傳遞給形參××kwargs
show(*l,**d) (2)
上面代碼中,我們在(1)處直接調(diào)用參數(shù),但是得到的結(jié)果不是我們想要的,我們想要把參數(shù)以列表或者字典的形式傳給對應(yīng)的形參,那么必須標(biāo)明是傳遞給哪個參數(shù)的,相當(dāng)于默認(rèn)參數(shù)一樣。否則只會傳遞給第一個參數(shù)*args,把列表和字典都放在同一個元組中。上面代碼的運(yùn)行結(jié)果如下:
運(yùn)行結(jié)果:
([11, 22, 33, 44], {'alex': 'sb', 'n1': 88}) <class 'tuple'> {} <class 'dict'> (11, 22, 33, 44) <class 'tuple'> {'alex': 'sb', 'n1': 88} <class 'dict'>
5.字符串中參數(shù)的情況
(1)字符串格式化,向字符串中傳遞列表參數(shù)
s1 = "{0} is {1}." result = s1.format("alex","sb")(1) l = ["alex","sb"] (2) res = s1.format(*l) print(result) print(res)
上面,我們有兩種向字符串傳遞參數(shù)的方法,方法(1)中我們直接按順序傳遞參數(shù)給s1,在方法(2)中我們指定一個列表,但是使用*args的形式給字符串s1傳遞參數(shù)。列表是有序的。
(2)向字符串中傳遞字典形式的參數(shù)
s1 = "{name} is {acter}." result = s1.format(name="alex",acter="sb") d = {"name":"alex","acter":"sb"} #向列表中傳遞字典形式的參數(shù) res = s1.format(**d) print(result) print(res)
在上面代碼中,我們向字符串中傳遞了一個字典形式的參數(shù),我們知道字典的格式,在傳遞給字符串的時候要指定我們傳遞的參數(shù)是一個字典,
因而要使用**d格式,告訴Python。
6.lambda表達(dá)式
lambda簡單表達(dá)式就是函數(shù)的簡單表示形式:
>>> func = lambda a:a+1 >>> ret = func(99) >>> print(ret) 100
在上面形式中,func是定義一個函數(shù),lambda表示的是我們定義了一個lambad表達(dá)式,其中a代表的形參,冒號(:)后面的a+1代表表達(dá)式,對
函數(shù)進(jìn)行什么樣的處理,然后把結(jié)果返回給ret這個變量,調(diào)用它的變量。省略了return。
上面形式參數(shù)可以有多個,冒號前面是參數(shù),可以多個;冒號后面是函數(shù)體。
lambda表達(dá)式創(chuàng)建了形參a;函數(shù)內(nèi)容a+1,并把結(jié)果返回給調(diào)用函數(shù)的變量。
以上這篇淺談function(函數(shù))中的動態(tài)參數(shù)就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Python post請求實(shí)現(xiàn)代碼實(shí)例
這篇文章主要介紹了Python post請求實(shí)現(xiàn)代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-02-02Python實(shí)戰(zhàn)使用XPath采集數(shù)據(jù)示例解析
這篇文章主要為大家介紹了Python實(shí)戰(zhàn)之使用XPath采集數(shù)據(jù)實(shí)現(xiàn)示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪<BR>2023-04-04Python解析器Cpython的GIL解釋器鎖工作機(jī)制
這篇文章主要為大家介紹了Cpython的GIL解釋器鎖工作機(jī)制掌握示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-07-07Python集成C#實(shí)現(xiàn)界面操作下載文件功能的全過程
使用腳本進(jìn)行下載的需求很常見,下面這篇文章主要給大家介紹了關(guān)于Python集成C#實(shí)現(xiàn)界面操作下載文件功能的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-03-03python實(shí)現(xiàn)跳表SkipList的示例代碼
這篇文章主要介紹了python實(shí)現(xiàn)跳表SkipList的示例代碼,代碼簡單易懂,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-07-07