程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

python3教程:函數的可變輸入參量

編輯:Python

通常我們在python中定義一個函數的時候,需要給出明確的函數輸入參量,比如對於一個數學函數z=f(x,y)就表示,z是關於x和y的一個函數。但是如果對於未知參量的函數,比如函數形式可以是z=f(x,y),但也可以是z=f(x,y,m,n,i,j,k),在不確定入參的時候,就可以采用python中的*args和**kwargs參數。

*args參數的使用方法

首先用一個例子來說明一下*args的基本用法,這個參量可以替代函數括號中的固定變量,從數據結構上說是一個可變長度的tuple:

def fargs(*args):
s = 0
for variable in args:
s += float(variable)
return s
if __name__ == '__main__':
import sys
args_string = ''
for number in sys.argv[1:]: # 從命令行獲取任意長度的參數
args_string += number
args_string += ','
s = eval('fargs({})'.format(args_string)) # 直接用字符串執行函數
print ('The sum of {} is: {}'.format(args_string, s))

在這個案例中,我們不僅介紹了*args的使用方法,也利用了命令行參數獲取和eval函數這兩個python中常見的使用技巧。其中關於獲取命令行參數的使用技巧,可以參考這一篇博客。上述代碼的執行效果如下所示:

[[email protected]-manjaro args]$ python3 test_args.py 1 2 3 3.14
The sum of 1,2,3,3.14, is: 9.14
[[email protected]-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

這裡給了兩個不同長度的輸入,通過函數fargs完成了求和的工作,並且輸入的長度是可變的。

**kwargs的用法

kwargs的用法是類似於上面介紹的*args的,區別在於kwargs本質上是傳入了一個“字典”,或者稱之為一個鍵值對。需要注意的是,這裡每一個鍵值對的數據格式都是tuple類型的,而不是python中的字典類型,所以上面說到“字典”時加了引號。參考示例如下:

''' 學習中遇到問題沒人解答?小編創建了一個Python學習交流QQ群:857662006 尋找有志同道合的小伙伴,互幫互助,群裡還有不錯的視頻學習教程和PDF電子書! '''
def fkwargs(**kwargs):
s = 0
print ('Key values input: ',kwargs)
for key, variable in kwargs.items():
s += float(variable)
return s
if __name__ == '__main__':
import sys
args_string = ''
for number in sys.argv[1:]:
args_string += number
args_string += ','
s = eval('fkwargs({})'.format(args_string))
print ('The sum of {} is: {}'.format(args_string, s))

這裡的場景我們設置為一個買菜購物計算總價格的函數,輸入的參數是每一個購買的物品及其價格,最後的輸出是購買總價格,測試結果如下所示:

[[email protected]-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
[[email protected]-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

總結

為了使得輸入參數的可擴展性更好,python中自帶了args和kwargs兩種方法,可以用於表示一個tuple類型的可變長度入參。其中args是一系列的一元變量的輸入,kwargs是一系列鍵值對的輸入,可以認為是一個二元變量的輸入。雖然這兩種方案也都可以用自行實現的tuple來替代,但是直接使用這兩種定義會節省很多自定義可變入參的繁瑣。


  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved