国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

Python中函數(shù)的參數(shù)定義和可變參數(shù)用法實例分析

2020-02-23 01:32:02
字體:
供稿:網(wǎng)友

本文實例講述了Python中函數(shù)的參數(shù)定義和可變參數(shù)用法。分享給大家供大家參考。具體如下:

剛學(xué)用Python的時候,特別是看一些庫的源碼時,經(jīng)常會看到func(*args, **kwargs)這樣的函數(shù)定義,這個*和**讓人有點費解。其實只要把函數(shù)參數(shù)定義搞清楚了,就不難理解了。

先說說函數(shù)定義,我們都知道,下面的代碼定義了一個函數(shù)funcA

def funcA(): pass

顯然,函數(shù)funcA沒有參數(shù)(同時啥也不干:D)。

下面這個函數(shù)funcB就有兩個參數(shù)了,

def funcB(a, b): print a print b

調(diào)用的時候,我們需要使用函數(shù)名,加上圓括號擴(kuò)起來的參數(shù)列表,比如 funcB(100, 99),執(zhí)行結(jié)果是:

100
99

很明顯,參數(shù)的順序和個數(shù)要和函數(shù)定義中一致,如果執(zhí)行funcB(100),Python會報錯的:

TypeError: funcB() takes exactly 2 arguments (1 given)

我們可以在函數(shù)定義中使用參數(shù)默認(rèn)值,比如

def funcC(a, b=0): print a print b

在函數(shù)funcC的定義中,參數(shù)b有默認(rèn)值,是一個可選參數(shù),如果我們調(diào)用funcC(100),b會自動賦值為0。

OK,目前為止,我們要定義一個函數(shù)的時候,必須要預(yù)先定義這個函數(shù)需要多少個參數(shù)(或者說可以接受多少個參數(shù))。一般情況下這是沒問題的,但是也有在定義函數(shù)的時候,不能知道參數(shù)個數(shù)的情況(想一想C語言里的printf函數(shù)),在Python里,帶*的參數(shù)就是用來接受可變數(shù)量參數(shù)的。看一個例子

def funcD(a, b, *c): print a print b print "length of c is: %d " % len(c) print c

調(diào)用funcD(1, 2, 3, 4, 5, 6)結(jié)果是

1
2
length of c is: 4
(3, 4, 5, 6)

我們看到,前面兩個參數(shù)被a、b接受了,剩下的4個參數(shù),全部被c接受了,c在這里是一個tuple。我們在調(diào)用funcD的時候,至少要傳遞2個參數(shù),2個以上的參數(shù),都放到c里了,如果只有兩個參數(shù),那么c就是一個empty tuple。

好了,一顆星我們弄清楚了,下面輪到兩顆星。

上面的例子里,調(diào)用函數(shù)的時候,傳遞的參數(shù)都是根據(jù)位置來跟函數(shù)定義里的參數(shù)表匹配的,比如funcB(100, 99)和funcB(99, 100)的執(zhí)行結(jié)果是不一樣的。在Python里,還支持一種用關(guān)鍵字參數(shù)(keyword argument)調(diào)用函數(shù)的辦法,也就是在調(diào)用函數(shù)的時候,明確指定參數(shù)值付給那個形參。比如還是上面的funcB(a, b),我們通過這兩種方式調(diào)用
funcB(a=100, b=99)

funcB(b=99, a=100)

結(jié)果跟funcB(100, 99)都是一樣的,因為我們在使用關(guān)鍵字參數(shù)調(diào)用的時候,指定了把100賦值給a,99賦值給b。也就是說,關(guān)鍵字參數(shù)可以讓我們在調(diào)用函數(shù)的時候打亂參數(shù)傳遞的順序!

另外,在函數(shù)調(diào)用中,可以混合使用基于位置匹配的參數(shù)和關(guān)鍵字參數(shù),前題是先給出固定位置的參數(shù),比如

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 克什克腾旗| 云浮市| 宜阳县| 靖宇县| 读书| 武宁县| 甘洛县| 栾城县| 乌拉特中旗| 陈巴尔虎旗| 卢湾区| 高阳县| 绥德县| 镇平县| 九台市| 正宁县| 四川省| 诸暨市| 晋中市| 玛纳斯县| 富源县| 什邡市| 萨嘎县| 新营市| 嘉黎县| 上虞市| 锦州市| 樟树市| 昌都县| 博野县| 广元市| 凉城县| 安西县| 太仆寺旗| 城口县| 长兴县| 翼城县| 宜春市| 朝阳区| 祁门县| 阿合奇县|