欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python函數(shù)默認(rèn)參數(shù)使用避坑指南

 更新時(shí)間:2022年07月21日 11:39:22   作者:明天再學(xué)  
這篇文章主要為大家介紹了python函數(shù)默認(rèn)參數(shù)使用的踩雷避坑詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

引言

阿刁是一個(gè)自動(dòng)化測(cè)試用例,從一出生他就被賦予終生使命,去測(cè)試一個(gè)叫登錄的過(guò)程是否合理。他一直就被關(guān)在一個(gè)小黑屋里面,從來(lái)也沒有出去過(guò),小黑屋里還被關(guān)著其他的同胞,他們身上都捆著兩個(gè)小袋子。

小黑屋里很難受,他們都想跑出去,可怎么也跑不出去。Python 是他們的總司令,有一次,python 告訴他們,你們就不要想著跑出去了,你們已經(jīng)夠幸運(yùn)了,只有 8 個(gè)人用這個(gè)屋子,別的屋子都擠著 30 多個(gè)人呢!

“這里還有其他的屋子?” 一個(gè)用例頓時(shí)感到很欣喜。

“有,這樣的屋子這里有 200 多個(gè)。每個(gè)屋子都有門牌號(hào),你們這個(gè)門牌是 test_login,你們這個(gè)小鎮(zhèn)住的人都很危險(xiǎn),所以通常不允許出去逛。這是你們的小鎮(zhèn)地圖。‘’

“我們哪里危險(xiǎn)了。。。” 阿刁很不滿。

Python 微微一笑:“你別不服,看到你們身后的袋子了嗎?這里面裝了炸彈,里面有兩種火藥配方,一個(gè)叫 ‘’ 用戶名”,一個(gè)叫 “密碼”,你們每個(gè)人的配方都不一樣,因此威力也不一樣。你們的工作就是去測(cè)試 login 這個(gè)堡壘的堅(jiān)固程度,這樣堡壘真正投入使用的時(shí)候,就不怕外面的攻擊了。”

“可我們每天都被關(guān)在屋子里,哪知道怎么去攻擊城堡。”

“這個(gè)是個(gè)好問(wèn)題。你們每個(gè)人的名字下面我都掛了個(gè)錦囊,里面有指令,按照指令做就行了。”

阿刁低頭一看,還真有指令,他大聲的念了出來(lái):第一條指令是叫 verify 過(guò)來(lái)幫忙,第二條指令是把炸彈裝到 verify 身上,第三條指令是查看 verify 豎起的旗幟,看是否和自己身上的胎記一樣,如果一樣,就可以下班了;如果不一樣,那就報(bào)告 Python。

“咦,我的指令也是一樣的。我的胎記上有一行字,密碼為空。你們的呢?”

“我的也是。”

"我的是用戶不能為空。"

“我的跟你一樣啊”

阿刁低頭去看自己的胎記 “登錄成功”。這給了他希望,不過(guò)他對(duì)自己的工作還有些疑惑,他得乘總司令還在的時(shí)候問(wèn)問(wèn)他:“老大,你的指令寫得非常明確,可我并不認(rèn)識(shí)什么 verify,萬(wàn)一他不過(guò)來(lái)怎么辦?”,其他人一聽到這個(gè)頓時(shí)都焦慮起來(lái),是啊,萬(wàn)一 verify 不來(lái),這炸彈炸到自己了怎么辦?

verify 炸彈

Python 指揮官給了阿刁一個(gè)贊賞的眼神,開始講:“大家不要慌,你們看到墻上的按鈕了嗎 “

所有人都紛紛望向墻面,上面有很多按鈕,其中一個(gè)印著:

from castles.login import verify

” 雖然你們通常不允許出去,但是別人是可以進(jìn)出的,你們看地圖,verify 是 logi

列表是一種經(jīng)常使用的數(shù)據(jù)類型。在函數(shù)的定義中,常常會(huì)使用列表作為參數(shù)。

測(cè)試接口的數(shù)據(jù)

比如,要測(cè)試一個(gè)接口的數(shù)據(jù),接口返回的數(shù)據(jù)格式如下:

{
  "code": "20000", 
  "data": ["孫悟空","李白","甄姬"], 
  "msg": "success", 
  "status": 0
}

要測(cè)試的內(nèi)容是:返回的 data 數(shù)據(jù)是否跟需求符合。在測(cè)試之前,需要對(duì)數(shù)據(jù)進(jìn)一步處理,比如要增加 "王昭君" 這個(gè)元素進(jìn)去,需要寫一個(gè)函數(shù):

def add_element(data=["孫悟空","李白","甄姬"]):
    data.append('王昭君')
    return data

print(add_element())
print(add_element())
print(add_element())

在函數(shù)定義的時(shí)候經(jīng)常會(huì)給參數(shù)設(shè)置默認(rèn)值,在這個(gè)例子中,將 data 參數(shù)設(shè)置了默認(rèn)值,函數(shù)定義以后,后面會(huì)被頻繁的調(diào)用,期望值應(yīng)該是打印如下:

["孫悟空","李白","甄姬","王昭君"]
["孫悟空","李白","甄姬","王昭君"]
["孫悟空","李白","甄姬","王昭君"]

實(shí)際結(jié)果為:

["孫悟空","李白","甄姬","王昭君"]
["孫悟空","李白","甄姬","王昭君","王昭君"]
["孫悟空","李白","甄姬","王昭君","王昭君","王昭君"]

原因

當(dāng)定義函數(shù)時(shí),會(huì)保存函數(shù)中默認(rèn)參數(shù) data 的值,也就是 ["孫悟空","李白","甄姬"],在每次調(diào)用的時(shí)候如果傳遞了新的實(shí)參,則使用傳遞的參數(shù);沒有傳遞,使用定義函數(shù)時(shí)保存的默認(rèn)參數(shù)。

上面兩次調(diào)用中,都沒有傳遞新的實(shí)參,程序會(huì)調(diào)用定義函數(shù)時(shí)保存的默認(rèn)參數(shù),因?yàn)?append() , 在第一次調(diào)用以后,默認(rèn)參數(shù)已經(jīng)由 ["孫悟空","李白","甄姬"] 改變?yōu)?nbsp;["孫悟空","李白","甄姬","王昭君"],再次執(zhí)行 append() 之后,就變成了 ["孫悟空","李白","甄姬","王昭君","王昭君"];同理,第三次又改變了。

可以使用 id() 函數(shù)來(lái)定位問(wèn)題:

def add_element(data=["孫悟空","李白","甄姬"]):
    # id 來(lái)表示是不是同一個(gè)對(duì)象
  print(id(data))
    data.append('王昭君')
    return data

print(add_element())
print(add_element())
print(add_element())

打印出來(lái)的 id(data) 為同一個(gè)對(duì)象,也就是默認(rèn)參數(shù)。如果我們改變 第二個(gè) print(add_element())為 print(add_element(["孫悟空","李白","甄姬"])),那么第 2 個(gè) id(data) 就會(huì)發(fā)生變化,因?yàn)樗辉谑悄J(rèn)值,而是新傳進(jìn)來(lái)的實(shí)參,實(shí)際結(jié)果也將變成:

2543416926792
['孫悟空', '李白', '甄姬', '王昭君']
2543418907848
["孫悟空","李白","甄姬", '王昭君']
2543416926792
['孫悟空', '李白', '甄姬', '王昭君', '王昭君']

改進(jìn)方案

  • 如果參數(shù)中有列表,盡量不要用它做默認(rèn)參數(shù)
  • 如果使用了列表作為默認(rèn)參數(shù),函數(shù)調(diào)用時(shí)傳入實(shí)參,而不是省略
  • 可以在函數(shù)體中另外定義一個(gè)變量接收默認(rèn)參數(shù)
def add_element(data=["孫悟空","李白","甄姬"]):
    if data == ["孫悟空","李白","甄姬"]:
        data = ["孫悟空","李白","甄姬"]
    data.append('王昭君')
    return data

以上就是python函數(shù)默認(rèn)參數(shù)使用避坑指南的詳細(xì)內(nèi)容,更多關(guān)于python函數(shù)默認(rèn)參數(shù)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Python網(wǎng)絡(luò)爬蟲之獲取網(wǎng)絡(luò)數(shù)據(jù)

    Python網(wǎng)絡(luò)爬蟲之獲取網(wǎng)絡(luò)數(shù)據(jù)

    本文介紹了Python中用于獲取網(wǎng)絡(luò)數(shù)據(jù)的重要工具之一——Requests庫(kù),詳細(xì)講解了Requests庫(kù)的基本使用方法、請(qǐng)求方法、請(qǐng)求頭、請(qǐng)求參數(shù)、Cookies、Session等內(nèi)容,并結(jié)合實(shí)例代碼展示了Requests庫(kù)的應(yīng)用場(chǎng)景
    2023-04-04
  • Python利用ansible分發(fā)處理任務(wù)

    Python利用ansible分發(fā)處理任務(wù)

    這篇文章主要介紹了Python利用ansible分發(fā)處理任務(wù)的相關(guān)資料,需要的朋友可以參考下
    2015-08-08
  • Python3內(nèi)置模塊之json編解碼方法小結(jié)【推薦】

    Python3內(nèi)置模塊之json編解碼方法小結(jié)【推薦】

    這篇文章主要介紹了Python3內(nèi)置模塊之json編解碼方法小結(jié),本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-05-05
  • Python實(shí)現(xiàn)PDF掃描件生成DOCX或EXCEL功能

    Python實(shí)現(xiàn)PDF掃描件生成DOCX或EXCEL功能

    這篇文章主要介紹了如何利用Python實(shí)現(xiàn)將PDF掃描件轉(zhuǎn)為DOCX或EXCEL文件格式功能,文中的示例代碼講解詳細(xì),需要的小伙伴可以參考一下
    2022-03-03
  • TensorFlow實(shí)現(xiàn)簡(jiǎn)單的CNN的方法

    TensorFlow實(shí)現(xiàn)簡(jiǎn)單的CNN的方法

    這篇文章主要介紹了TensorFlow實(shí)現(xiàn)簡(jiǎn)單的CNN的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07
  • Android申請(qǐng)相機(jī)權(quán)限和讀寫權(quán)限實(shí)例

    Android申請(qǐng)相機(jī)權(quán)限和讀寫權(quán)限實(shí)例

    大家好,本篇文章主要講的是Android申請(qǐng)相機(jī)權(quán)限和讀寫權(quán)限實(shí)例,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話記得收藏一下
    2022-02-02
  • tensorflow 查看梯度方式

    tensorflow 查看梯度方式

    今天小編就為大家分享一篇tensorflow 查看梯度方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-02-02
  • python實(shí)現(xiàn)動(dòng)態(tài)GIF英數(shù)驗(yàn)證碼識(shí)別示例

    python實(shí)現(xiàn)動(dòng)態(tài)GIF英數(shù)驗(yàn)證碼識(shí)別示例

    這篇文章主要為大家介紹了python實(shí)現(xiàn)動(dòng)態(tài)GIF英數(shù)驗(yàn)證碼識(shí)別示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2024-01-01
  • Python獲取linux主機(jī)ip的簡(jiǎn)單實(shí)現(xiàn)方法

    Python獲取linux主機(jī)ip的簡(jiǎn)單實(shí)現(xiàn)方法

    這篇文章主要介紹了Python獲取linux主機(jī)ip的簡(jiǎn)單實(shí)現(xiàn)方法,涉及Python使用socket模塊調(diào)用shell命令的相關(guān)技巧,需要的朋友可以參考下
    2016-04-04
  • plt.subplot()參數(shù)及使用介紹

    plt.subplot()參數(shù)及使用介紹

    本文主要介紹了plt.subplot()參數(shù)及使用介紹,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-01-01

最新評(píng)論