python函數(shù)之任意數(shù)量的實(shí)參方式
傳遞任意數(shù)量的實(shí)參
有的時(shí)候,預(yù)先不知道函數(shù)需要接受多少個(gè)實(shí)參,好在python允許函數(shù)從調(diào)用語(yǔ)句中收集任意數(shù)量的實(shí)參。
舉個(gè)實(shí)際的例子吧,比如,我們?cè)谧鱿銍妵姷碾s糧煎餅(嗯,聽(tīng)起來(lái)就香~),它可以添加很多喜歡的配料,但是我們不知道來(lái)的顧客想要加什么。
來(lái)看看一段code,函數(shù)只有一個(gè)形參*toppings,但不管調(diào)用語(yǔ)句提供了多少實(shí)參,這個(gè)形參都將它們統(tǒng)統(tǒng)收入囊中:
def make_jianbing(*toppings): print(toppings) make_jianbing('regou') make_jianbing('weilong','liang ge eggs','regou')
('regou',) ('weilong', 'liang ge eggs', 'regou')
形參名*toppings中的星號(hào)讓python創(chuàng)建一個(gè)名為toppings的空元組,并將收到的所有值都封裝到這個(gè)元組中。
函數(shù)體內(nèi)的print語(yǔ)句通過(guò)生成輸出來(lái)證明python能夠處理使用一個(gè)值調(diào)用函數(shù)的情形,也能處理使用三個(gè)值來(lái)調(diào)用函數(shù)的情形。
它以類似的方式處理不同的調(diào)用。
注意python將實(shí)參封裝到一個(gè)元組中,即便函數(shù)只收到一個(gè)值也如此。
來(lái)繼續(xù)擴(kuò)展一下:
def make_jianbing(*toppings): print("\nMakeing a jianbing with the following toppings: ") for topping in toppings: print("-" + topping) make_jianbing('regou') make_jianbing('weilong','liang ge eggs','regou')
Makeing a jianbing with the following toppings: -regou Makeing a jianbing with the following toppings: -weilong -liang ge eggs -regou
不管函數(shù)收到的實(shí)參個(gè)數(shù)是多少個(gè),這種語(yǔ)法都非常管用。
結(jié)合使用位置實(shí)參和任意數(shù)量實(shí)參
如果要讓函數(shù)接受不同類型的實(shí)參,必須在函數(shù)定義中將接納任意數(shù)量實(shí)參的形參放在最后。
python先匹配位置實(shí)參和關(guān)鍵字實(shí)參,再將余下的實(shí)參都收集到最后一個(gè)形參中。
比如呢?
上面的例子中,可能一個(gè)顧客需要多份煎餅,就需要一個(gè)數(shù)量的實(shí)參,必須將該形參放在形參*toppings的前面:
def make_jianbing(count,*toppings): print("\nMaking a " + str(count) + "-ge jianbing with the following toppings: ") for topping in toppings: print("- " + topping) make_jianbing(2,'kaochang') make_jianbing(4,'weilong','shuanghuandan','kaochang')
Making a 2-ge jianbing with the following toppings: - kaochang Making a 4-ge jianbing with the following toppings: - weilong - shuanghuandan - kaochang
上面函數(shù)定義,python將收到的第一個(gè)值存儲(chǔ)到count中,并將其他的所有值都存儲(chǔ)在toppings中。
使用任意數(shù)量的關(guān)鍵字實(shí)參
有時(shí)候啊,需要接受任意數(shù)量的實(shí)參,但預(yù)先不知道傳遞給函數(shù)的會(huì)是什么樣的信息。
遇到這樣的需求時(shí),可將函數(shù)編寫(xiě)成能夠接受任意數(shù)量的鍵-值對(duì)-----調(diào)用語(yǔ)句提供了多少就接受多少。
舉個(gè)創(chuàng)建用戶簡(jiǎn)介的例子:
比如會(huì)收到用戶的信息,但不知道會(huì)是什么樣的信息,比如下面示例中,函數(shù)build_profile()接受名和姓,同時(shí)還接受任意數(shù)量的關(guān)鍵字實(shí)參:
def build_profile(first, last, **user_info): """ 創(chuàng)建一個(gè)字典,其中包含我們知道的有關(guān)用戶的一切 """ profile = {} profile['first_name'] = first profile['last_name'] = last for key,value in user_info.items(): profile[key] = value return profile user_profile = build_profile('albert' , 'einstenin' , location='princeton', field = 'physics') print(user_profile)
執(zhí)行結(jié)果:
{'field': 'physics', 'first_name': 'albert', 'location': 'princeton', 'last_name': 'einstenin'}
函數(shù)build_profile()的定義要求提供名和姓,同時(shí)允許用戶根據(jù)需要提供任意數(shù)量的名稱-值對(duì)。
形參**user_info中的兩個(gè)星號(hào)讓python創(chuàng)建一個(gè)名為user_info的空字典,并將收到的所有名稱-值對(duì)都封裝到這個(gè)字典中。
在這個(gè)函數(shù)中,可以像訪問(wèn)其他字典那樣訪問(wèn)user_info中的名稱-值對(duì)。
返回的字典包括用戶的名和姓,還有求學(xué)的地方和所學(xué)專業(yè)。調(diào)用這個(gè)函數(shù)時(shí)不管額外提供了多少個(gè)鍵-值對(duì),函數(shù)都能正確地處理。
編寫(xiě)函數(shù)時(shí),可以以各種方式混合使用位置實(shí)參,關(guān)鍵字實(shí)參和任意數(shù)量的實(shí)參。
練習(xí):
def make_guandongzhu(*foods): print(foods) for food in foods: print("\nYour select guan dong zhu include: " + food) make_guandongzhu('luobo','moyusi','haidian') make_guandongzhu('xianggujirouwan','yuzixianbei') make_guandongzhu('yudoufu','doupi','eggs')
('luobo', 'moyusi', 'haidian') Your select guan dong zhu include: luobo Your select guan dong zhu include: moyusi Your select guan dong zhu include: haidian ('xianggujirouwan', 'yuzixianbei') Your select guan dong zhu include: xianggujirouwan Your select guan dong zhu include: yuzixianbei ('yudoufu', 'doupi', 'eggs') Your select guan dong zhu include: yudoufu Your select guan dong zhu include: doupi Your select guan dong zhu include: eggs
練習(xí):
def cars_info(changjia,xinghao,**infos): cars = {} cars['producer'] = changjia cars['car'] = xinghao for key,value in infos.items(): cars[key] = key cars[value] = value return cars car_info = cars_info('beiqi','hongqi',ranliao='qiyou',money='pianyi') print(car_info)
{'car': 'hongqi', 'ranliao': 'ranliao', 'pianyi': 'pianyi', 'producer': 'beiqi', 'qiyou': 'qiyou', 'money': 'money'}
注意,函數(shù)參數(shù)中是兩個(gè)星號(hào)
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
pytorch中dataloader 的sampler 參數(shù)詳解
這篇文章主要介紹了pytorch中dataloader 的sampler 參數(shù)詳解,文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,感興趣的小伙伴可以參考一下2022-09-09跟老齊學(xué)Python之私有函數(shù)和專有方法
這篇文章是老齊學(xué)Python系列文章的一篇,主要介紹了跟私有函數(shù)和專有方法,需要的朋友可以參考下2014-10-10Python numpy大矩陣運(yùn)算內(nèi)存不足如何解決
這篇文章主要介紹了Python numpy大矩陣運(yùn)算內(nèi)存不足如何解決,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-11-11PyTorch模型轉(zhuǎn)TensorRT是怎么實(shí)現(xiàn)的?
今天給大家?guī)?lái)的是關(guān)于Python的相關(guān)知識(shí),文章圍繞著PyTorch模型轉(zhuǎn)TensorRT是怎么實(shí)現(xiàn)的展開(kāi),文中有非常詳細(xì)的介紹及代碼示例,需要的朋友可以參考下2021-06-06selenium 多窗口切換的實(shí)現(xiàn)(windows)
這篇文章主要介紹了selenium 多窗口切換的實(shí)現(xiàn)(windows),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-01-01python的三種等待方式及優(yōu)缺點(diǎn)小結(jié)
這篇文章主要介紹了python的三種等待方式及優(yōu)缺點(diǎn)的相關(guān)資料,三種等待元素加載的方法分別是強(qiáng)制等待、隱式等待和顯式等待,并詳細(xì)比較了它們的優(yōu)缺點(diǎn),需要的朋友可以參考下2024-12-12python實(shí)現(xiàn)AES和RSA加解密的方法
這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)AES和RSA加解密的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-03-03python數(shù)字圖像處理數(shù)據(jù)類型及顏色空間轉(zhuǎn)換
這篇文章主要為大家介紹了python數(shù)字圖像處理數(shù)據(jù)類型及顏色空間轉(zhuǎn)換示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-06-06