<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
阿刁是一個自動化測試用例,從一出生他就被賦予終生使命,去測試一個叫登入的過程是否合理。他一直就被關在一個小黑屋裡面,從來也沒有出去過,小黑屋裡還被關著其他的同胞,他們身上都捆著兩個小袋子。
小黑屋裡很難受,他們都想跑出去,可怎麼也跑不出去。Python 是他們的總司令,有一次,python 告訴他們,你們就不要想著跑出去了,你們已經夠幸運了,只有 8 個人用這個屋子,別的屋子都擠著 30 多個人呢!
“這裡還有其他的屋子?” 一個用例頓時感到很欣喜。
“有,這樣的屋子這裡有 200 多個。每個屋子都有門牌號,你們這個門牌是 test_login,你們這個小鎮住的人都很危險,所以通常不允許出去逛。這是你們的小鎮地圖。‘’
“我們哪裡危險了。。。” 阿刁很不滿。
Python 微微一笑:“你別不服,看到你們身後的袋子了嗎?這裡面裝了炸彈,裡面有兩種火藥配方,一個叫 ‘’ 使用者名稱”,一個叫 “密碼”,你們每個人的配方都不一樣,因此威力也不一樣。你們的工作就是去測試 login 這個堡壘的堅固程度,這樣堡壘真正投入使用的時候,就不怕外面的攻擊了。”
“可我們每天都被關在屋子裡,哪知道怎麼去攻擊城堡。”
“這個是個好問題。你們每個人的名字下面我都掛了個錦囊,裡面有指令,按照指令做就行了。”
阿刁低頭一看,還真有指令,他大聲的唸了出來:第一條指令是叫 verify 過來幫忙,第二條指令是把炸彈裝到 verify 身上,第三條指令是檢視 verify 豎起的旗幟,看是否和自己身上的胎記一樣,如果一樣,就可以下班了;如果不一樣,那就報告 Python。
“咦,我的指令也是一樣的。我的胎記上有一行字,密碼為空。你們的呢?”
“我的也是。”
"我的是使用者不能為空。"
“我的跟你一樣啊”
阿刁低頭去看自己的胎記 “登入成功”。這給了他希望,不過他對自己的工作還有些疑惑,他得乘總司令還在的時候問問他:“老大,你的指令寫得非常明確,可我並不認識什麼 verify,萬一他不過來怎麼辦?”,其他人一聽到這個頓時都焦慮起來,是啊,萬一 verify 不來,這炸彈炸到自己了怎麼辦?
Python 指揮官給了阿刁一個讚賞的眼神,開始講:“大家不要慌,你們看到牆上的按鈕了嗎 “
所有人都紛紛望向牆面,上面有很多按鈕,其中一個印著:
from castles.login import verify
” 雖然你們通常不允許出去,但是別人是可以進出的,你們看地圖,verify 是 logi
列表是一種經常使用的資料型別。在函數的定義中,常常會使用列表作為引數。
比如,要測試一個介面的資料,介面返回的資料格式如下:
{ "code": "20000", "data": ["孫悟空","李白","甄姬"], "msg": "success", "status": 0 }
要測試的內容是:返回的 data 資料是否跟需求符合。在測試之前,需要對資料進一步處理,比如要增加 "王昭君" 這個元素進去,需要寫一個函數:
def add_element(data=["孫悟空","李白","甄姬"]): data.append('王昭君') return data print(add_element()) print(add_element()) print(add_element())
在函數定義的時候經常會給引數設定預設值,在這個例子中,將 data 引數設定了預設值,函數定義以後,後面會被頻繁的呼叫,期望值應該是列印如下:
["孫悟空","李白","甄姬","王昭君"]
["孫悟空","李白","甄姬","王昭君"]
["孫悟空","李白","甄姬","王昭君"]
實際結果為:
["孫悟空","李白","甄姬","王昭君"]
["孫悟空","李白","甄姬","王昭君","王昭君"]
["孫悟空","李白","甄姬","王昭君","王昭君","王昭君"]
當定義函數時,會儲存函數中預設引數 data 的值,也就是 ["孫悟空","李白","甄姬"]
,在每次呼叫的時候如果傳遞了新的實參,則使用傳遞的引數;沒有傳遞,使用定義函數時儲存的預設引數。
上面兩次呼叫中,都沒有傳遞新的實參,程式會呼叫定義函數時儲存的預設引數,因為 append() , 在第一次呼叫以後,預設引數已經由 ["孫悟空","李白","甄姬"]
改變為 ["孫悟空","李白","甄姬","王昭君"]
,再次執行 append() 之後,就變成了 ["孫悟空","李白","甄姬","王昭君","王昭君"]
;同理,第三次又改變了。
可以使用 id() 函數來定位問題:
def add_element(data=["孫悟空","李白","甄姬"]): # id 來表示是不是同一個物件 print(id(data)) data.append('王昭君') return data print(add_element()) print(add_element()) print(add_element())
列印出來的 id(data)
為同一個物件,也就是預設引數。如果我們改變 第二個 print(add_element())
為 print(add_element(["孫悟空","李白","甄姬"]))
,那麼第 2 個 id(data)
就會發生變化,因為它不在是預設值,而是新傳進來的實參,實際結果也將變成:
2543416926792
['孫悟空', '李白', '甄姬', '王昭君']
2543418907848
["孫悟空","李白","甄姬", '王昭君']
2543416926792
['孫悟空', '李白', '甄姬', '王昭君', '王昭君']
def add_element(data=["孫悟空","李白","甄姬"]): if data == ["孫悟空","李白","甄姬"]: data = ["孫悟空","李白","甄姬"] data.append('王昭君') return data
以上就是python函數預設引數使用避坑指南的詳細內容,更多關於python函數預設引數的資料請關注it145.com其它相關文章!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45