日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術(shù)文章
文章詳情頁

Python如何定義有默認(rèn)參數(shù)的函數(shù)

瀏覽:111日期:2022-07-14 15:55:13

問題

你想定義一個函數(shù)或者方法,它的一個或多個參數(shù)是可選的并且有一個默認(rèn)值。

解決方案

定義一個有可選參數(shù)的函數(shù)是非常簡單的,直接在函數(shù)定義中給參數(shù)指定一個默認(rèn)值,并放到參數(shù)列表最后就行了。例如:

def spam(a, b=42): print(a, b)spam(1) # Ok. a=1, b=42spam(1, 2) # Ok. a=1, b=2

如果默認(rèn)參數(shù)是一個可修改的容器比如一個列表、集合或者字典,可以使用None作為默認(rèn)值,就像下面這樣:

# Using a list as a default valuedef spam(a, b=None): if b is None: b = [] ...

如果你并不想提供一個默認(rèn)值,而是想僅僅測試下某個默認(rèn)參數(shù)是不是有傳遞進(jìn)來,可以像下面這樣寫:

_no_value = object()def spam(a, b=_no_value): if b is _no_value: print(’No b value supplied’) ...

我們測試下這個函數(shù):

>>> spam(1)No b value supplied>>> spam(1, 2) # b = 2>>> spam(1, None) # b = None>>>

仔細(xì)觀察可以發(fā)現(xiàn)到傳遞一個None值和不傳值兩種情況是有差別的。

討論

定義帶默認(rèn)值參數(shù)的函數(shù)是很簡單的,但絕不僅僅只是這個,還有一些東西在這里也深入討論下。

首先,默認(rèn)參數(shù)的值僅僅在函數(shù)定義的時候賦值一次。試著運行下面這個例子:

>>> x = 42>>> def spam(a, b=x):... print(a, b)...>>> spam(1)1 42>>> x = 23 # Has no effect>>> spam(1)1 42>>>

注意到當(dāng)我們改變x的值的時候?qū)δJ(rèn)參數(shù)值并沒有影響,這是因為在函數(shù)定義的時候就已經(jīng)確定了它的默認(rèn)值了。

其次,默認(rèn)參數(shù)的值應(yīng)該是不可變的對象,比如None、True、False、數(shù)字或字符串。 特別的,千萬不要像下面這樣寫代碼:

def spam(a, b=[]): # NO! ...

如果你這么做了,當(dāng)默認(rèn)值在其他地方被修改后你將會遇到各種麻煩。這些修改會影響到下次調(diào)用這個函數(shù)時的默認(rèn)值。比如:

>>> def spam(a, b=[]):... print(b)... return b...>>> x = spam(1)>>> x[]>>> x.append(99)>>> x.append(’Yow!’)>>> x[99, ’Yow!’]>>> spam(1) # Modified list gets returned![99, ’Yow!’]>>>

這種結(jié)果應(yīng)該不是你想要的。為了避免這種情況的發(fā)生,最好是將默認(rèn)值設(shè)為None, 然后在函數(shù)里面檢查它,前面的例子就是這樣做的。

在測試None值時使用 is 操作符是很重要的,也是這種方案的關(guān)鍵點。 有時候大家會犯下下面這樣的錯誤:

def spam(a, b=None): if not b: # NO! Use ’b is None’ instead b = [] ...

這么寫的問題在于盡管None值確實是被當(dāng)成False, 但是還有其他的對象(比如長度為0的字符串、列表、元組、字典等)都會被當(dāng)做False。 因此,上面的代碼會誤將一些其他輸入也當(dāng)成是沒有輸入。比如:

>>> spam(1) # OK>>> x = []>>> spam(1, x) # Silent error. x value overwritten by default>>> spam(1, 0) # Silent error. 0 ignored>>> spam(1, ’’) # Silent error. ’’ ignored>>>

最后一個問題比較微妙,那就是一個函數(shù)需要測試某個可選參數(shù)是否被使用者傳遞進(jìn)來。 這時候需要小心的是你不能用某個默認(rèn)值比如None、 0或者False值來測試用戶提供的值(因為這些值都是合法的值,是可能被用戶傳遞進(jìn)來的)。 因此,你需要其他的解決方案了。

為了解決這個問題,你可以創(chuàng)建一個獨一無二的私有對象實例,就像上面的_no_value變量那樣。 在函數(shù)里面,你可以通過檢查被傳遞參數(shù)值跟這個實例是否一樣來判斷。 這里的思路是用戶不可能去傳遞這個_no_value實例作為輸入。 因此,這里通過檢查這個值就能確定某個參數(shù)是否被傳遞進(jìn)來了。

這里對 object() 的使用看上去有點不太常見。object 是python中所有類的基類。 你可以創(chuàng)建 object 類的實例,但是這些實例沒什么實際用處,因為它并沒有任何有用的方法, 也沒有任何實例數(shù)據(jù)(因為它沒有任何的實例字典,你甚至都不能設(shè)置任何屬性值)。 你唯一能做的就是測試同一性。這個剛好符合我的要求,因為我在函數(shù)中就只是需要一個同一性的測試而已。

以上就是Python如何定義有默認(rèn)參數(shù)的函數(shù)的詳細(xì)內(nèi)容,更多關(guān)于Python定義有默認(rèn)參數(shù)的函數(shù)的資料請關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標(biāo)簽: Python 編程
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
国产精品一区2区3区| 亚洲理论在线| 国产精品中文| 午夜性色一区二区三区免费视频| 石原莉奈在线亚洲二区| 久久天堂成人| 欧美亚洲国产激情| 99视频精品| 亚洲一区二区三区在线免费| 99日韩精品| 亚洲综合精品四区| 亚洲婷婷丁香| 日韩av不卡一区二区| 最新亚洲国产| 欧美亚洲综合视频| 青青伊人久久| 欧美国产极品| 精品久久99| 成人啊v在线| 一本色道精品久久一区二区三区| 国产精品天堂蜜av在线播放| 日韩欧美四区| 麻豆精品久久久| 91亚洲人成网污www| 亚洲午夜av| 亚洲欧美日韩国产一区二区| 日本va欧美va瓶| 精品中文字幕一区二区三区 | 美女在线视频一区| 另类综合日韩欧美亚洲| 亚洲国产欧美日本视频| 欧美日韩中文一区二区| 激情婷婷欧美| 蜜桃久久精品一区二区| 久久精品av麻豆的观看方式| 精品国产亚洲一区二区在线观看| 亚洲制服少妇| 婷婷综合成人| 福利在线一区| 日韩天堂av| 欧美一区二区三区久久| 福利在线免费视频| 欧美久久精品一级c片| 视频一区欧美精品| 国产欧美激情| 久久精品国产亚洲aⅴ| 欧美日韩一二| 亚洲天堂免费| 精品美女在线视频| 国产亚洲精品v| 青草国产精品| 久久久久久亚洲精品美女| 欧美日韩国产亚洲一区| 国产精品密蕾丝视频下载| 婷婷国产精品| 国产精品密蕾丝视频下载| 激情综合自拍| 欧美激情视频一区二区三区免费 | 99精品综合| 夜久久久久久| 久久伊人国产| 免费久久99精品国产自在现线| 亚洲精品123区| 国产欧美日韩精品一区二区免费| 日韩在线电影| 国产日韩电影| 欧美亚洲一级| 精品一区欧美| 国产精品黄色| 美女精品网站| 成人片免费看| 日韩区欧美区| 91精品婷婷色在线观看| 国产日产精品_国产精品毛片 | 国产精品久久久久毛片大屁完整版| 视频一区中文字幕国产| 麻豆国产一区| 99国产精品私拍| 麻豆国产精品视频| 亚洲精品九九| 99成人在线视频| 久久三级毛片| 97久久亚洲| 亚洲一区二区av| 成人啊v在线| 成人黄色av| 久久av影院| 欧美伊人久久| 亚洲综合福利| 亚洲激情av| 久久中文字幕二区| 桃色一区二区| 伊人久久国产| 国产精品22p| 亚洲精品免费观看| 国产视频久久| 免费观看不卡av| 捆绑调教日本一区二区三区| 国产美女视频一区二区| 一区二区国产精品| 视频一区中文字幕国产| 欧美+亚洲+精品+三区| 一区二区三区四区日本视频| 欧美黑人巨大videos精品| 欧美一区精品| 日本精品国产| 亚洲18在线| 亚洲有吗中文字幕| 一本色道久久精品| 亚洲欧美成人综合| 亚洲一区不卡| 日韩午夜精品| 免费欧美日韩| 亚洲一区国产| 亚洲精华国产欧美| 99日韩精品| 国产毛片一区| 免费成人在线视频观看| 亚洲欧美日本日韩| 亚洲综合三区| 一区二区三区国产盗摄| 中文字幕av一区二区三区四区| 精品欠久久久中文字幕加勒比| 久久精品动漫| 久久uomeier| 日韩精品不卡一区二区| 中文字幕在线免费观看视频| 麻豆成人在线观看| 久久一区精品| 四季av一区二区凹凸精品| 成人国产精品一区二区免费麻豆| 亚洲在线一区| 一区在线免费观看| 美女精品在线观看| 亚洲精品九九| 日韩高清在线一区| 国产精品成人一区二区网站软件| 在线成人动漫av| 激情欧美日韩一区| 性欧美精品高清| 亚洲欧洲专区| 久久国内精品视频| 精品视频久久| 久久久久国产精品一区二区| 国产99亚洲| 人人精品人人爱| 国产欧美综合一区二区三区| 精品欠久久久中文字幕加勒比| 亚洲精品影视| 欧美一区二区三区久久精品| 欧美国产另类| 伊人久久视频| 欧美高清一区| 视频一区日韩精品| 精品美女在线视频| 欧美高清不卡| 欧美在线不卡| 日韩欧美网址| 日韩午夜在线| 国产精品成人自拍| 日韩精品麻豆| 一区二区电影| 久久精品国产网站| 欧美特黄一级| 欧美日韩亚洲一区在线观看| 成人三级高清视频在线看| 一区三区视频| 国产精品v亚洲精品v日韩精品 | 夜夜嗨一区二区三区| 视频一区二区中文字幕| 国产精品久久久久久久久久白浆| 亚洲精品观看| 国产精品18| 亚洲婷婷免费| 欧美伊人久久| 久久久久国产精品一区二区| 亚洲精品美女91| 色偷偷偷在线视频播放| 一本综合精品| 日韩毛片视频| 免费久久99精品国产自在现线| 日韩欧美自拍| 视频一区视频二区在线观看| 国产精品地址| 激情久久中文字幕| 国产日产精品_国产精品毛片 | 国产精品88久久久久久| 中日韩男男gay无套| 日韩黄色av| 国产精品一区二区中文字幕| 美女网站视频一区| 亚洲乱码视频| av资源中文在线| 亚洲日产av中文字幕| 国产精品亚洲一区二区三区在线观看| 久久一区亚洲| 国产精品日韩欧美一区| 国产一区二区色噜噜| 手机精品视频在线观看| 91免费精品|