python3函数可变输入参量
通常我們?cè)趐ython中定義一個(gè)函數(shù)的時(shí)候,需要給出明確的函數(shù)輸入?yún)⒘?#xff0c;比如對(duì)于一個(gè)數(shù)學(xué)函數(shù)z=f(x,y)就表示,z是關(guān)于x和y的一個(gè)函數(shù)。
但是如果對(duì)于未知參量的函數(shù),比如函數(shù)形式可以是z=f(x,y),但也可以是z=f(x,y,m,n,i,j,k),在不確定入?yún)⒌臅r(shí)候,就可以采用python中的*args和**kwargs參數(shù)。
*args參數(shù)的使用方法
首先用一個(gè)例子來(lái)說(shuō)明一下*args的基本用法,這個(gè)參量可以替代函數(shù)括號(hào)中的固定變量,從數(shù)據(jù)結(jié)構(gòu)上說(shuō)是一個(gè)可變長(zhǎng)度的tuple:
def fargs(*args):s = 0for variable in args:s += float(variable)return sif __name__ == '__main__':import sysargs_string = ''for number in sys.argv[1:]: # 從命令行獲取任意長(zhǎng)度的參數(shù)args_string += numberargs_string += ','s = eval('fargs({})'.format(args_string)) # 直接用字符串執(zhí)行函數(shù)print ('The sum of {} is: {}'.format(args_string, s))在這個(gè)案例中,我們不僅介紹了*args的使用方法,也利用了命令行參數(shù)獲取和eval函數(shù)這兩個(gè)python中常見(jiàn)的使用技巧。其中關(guān)于獲取命令行參數(shù)的使用技巧,可以參考這一篇博客。上述代碼的執(zhí)行效果如下所示:
[dechin@dechin-manjaro args]$ python3 test_args.py 1 2 3 3.14 The sum of 1,2,3,3.14, is: 9.14 [dechin@dechin-manjaro args]$ python3 test_args.py 1 2 3 3.14 0.86 The sum of 1,2,3,3.14,0.86, is: 10.0這里給了兩個(gè)不同長(zhǎng)度的輸入,通過(guò)函數(shù)fargs完成了求和的工作,并且輸入的長(zhǎng)度是可變的。
**kwargs的用法
kwargs的用法是類(lèi)似于上面介紹的*args的,區(qū)別在于kwargs本質(zhì)上是傳入了一個(gè)“字典”,或者稱(chēng)之為一個(gè)鍵值對(duì)。需要注意的是,這里每一個(gè)鍵值對(duì)的數(shù)據(jù)格式都是tuple類(lèi)型的,而不是python中的字典類(lèi)型,所以上面說(shuō)到“字典”時(shí)加了引號(hào)。參考示例如下:
''' 學(xué)習(xí)中遇到問(wèn)題沒(méi)人解答?小編創(chuàng)建了一個(gè)Python學(xué)習(xí)交流QQ群:531509025 尋找有志同道合的小伙伴,互幫互助,群里還有不錯(cuò)的視頻學(xué)習(xí)教程和PDF電子書(shū)! ''' def fkwargs(**kwargs):s = 0print ('Key values input: ',kwargs)for key, variable in kwargs.items():s += float(variable)return sif __name__ == '__main__':import sysargs_string = ''for number in sys.argv[1:]:args_string += numberargs_string += ','s = eval('fkwargs({})'.format(args_string))print ('The sum of {} is: {}'.format(args_string, s))這里的場(chǎng)景我們?cè)O(shè)置為一個(gè)買(mǎi)菜購(gòu)物計(jì)算總價(jià)格的函數(shù),輸入的參數(shù)是每一個(gè)購(gòu)買(mǎi)的物品及其價(jià)格,最后的輸出是購(gòu)買(mǎi)總價(jià)格,測(cè)試結(jié)果如下所示:
[dechin@dechin-manjaro args]$ python3 test_kwargs.py egg=20 beaf=60 milk=10 Key values input: {'egg': 20, 'beaf': 60, 'milk': 10} The sum of egg=20,beaf=60,milk=10, is: 90.0 [dechin@dechin-manjaro args]$ python3 test_kwargs.py egg=20 water=1 Key values input: {'egg': 20, 'water': 1} The sum of egg=20,water=1, is: 21.0總結(jié)概要
為了使得輸入?yún)?shù)的可擴(kuò)展性更好,python中自帶了args和kwargs兩種方法,可以用于表示一個(gè)tuple類(lèi)型的可變長(zhǎng)度入?yún)ⅰF渲衋rgs是一系列的一元變量的輸入,kwargs是一系列鍵值對(duì)的輸入,可以認(rèn)為是一個(gè)二元變量的輸入。雖然這兩種方案也都可以用自行實(shí)現(xiàn)的tuple來(lái)替代,但是直接使用這兩種定義會(huì)節(jié)省很多自定義可變?nèi)雲(yún)⒌姆爆崱?/p>
結(jié)尾給大家推薦一個(gè)非常好的學(xué)習(xí)教程,希望對(duì)你學(xué)習(xí)Python有幫助!
Python基礎(chǔ)入門(mén)教程推薦:更多Python視頻教程-關(guān)注B站:Python學(xué)習(xí)者
【Python教程】全網(wǎng)最容易聽(tīng)懂的1000集python系統(tǒng)學(xué)習(xí)教程(答疑在最后四期,滿滿干貨)
Python爬蟲(chóng)案例教程推薦:更多Python視頻教程-關(guān)注B站:Python學(xué)習(xí)者
2021年P(guān)ython最新最全100個(gè)爬蟲(chóng)完整案例教程,數(shù)據(jù)分析,數(shù)據(jù)可視化,記得收藏哦
總結(jié)
以上是生活随笔為你收集整理的python3函数可变输入参量的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 通过Python实现某个目录下所有文件(
- 下一篇: Python的模块化编程