Python每日小知識(6)函數滴參數

函數的參數算法

總結一下這幾種參數先: 原本位置是默認滴,後來不知咋地可變了,位置上還用關鍵字這麼上檔次的名字命名關鍵字了。

先講講廢話:咱們作接口自動化或者其它測試,總之須要使用一些參數的時候,咱們做爲函數的調用者,無需瞭解太多,你只須要膚淺的知道如何如何滴傳遞準確無誤的參數以及知道函數將返回什麼值便可,這樣就能夠完美的完成工做了,至於那些內部複雜的邏輯被封裝起來了,做爲調用者暫時就不考慮啦。函數

(1) 位置參數:顧名思義就是排排坐,按位置賦值就這麼簡單。測試

先計算X三次方的值:下面對於power()函數而言,參數x就是位置參數,但有且僅能傳入一個參數,傳入過多就是做死的行爲了。

clipboard.png

若是要計算X的n次方,就要傳入兩個參數了,只要對應位置便可

clipboard.png

默認參數:做用就是簡化函數的調用,也有須要當心的地方spa

(1) 必選參數必須在前,默認參數在後;
(2) 有較多參數擺在面前時,變化較大參數在前,變化較小的在後並做爲默認參數;

好比傳入記錄信息的函數,須要傳入author、tel兩個參數對象

clipboard.png

這時調用report()函數後輸入兩個參數值便可

clipboard.png

固然兩個參數的對於那些登陸的帳號、密碼這操做徹底沒問題,但若是是一些表單須要填入住址、電話、婚史、收入等信息,那後期調用函數的複雜度大大增長,因此咱們就能夠靠默認函數把信息不大變更的參數設置爲默認值再進行調用

拋磚引玉一番:把地址和收入設置爲默認參數blog

clipboard.png

clipboard.png

如果與咱們設置的默認參數不符合,只能本身動動手指添加對應的額外信息啦。

clipboard.png

默認參數這傢伙仍是有點點瑕疵的,默認參數必須必定以及確定得指向不可變對象。 如今用典型的list來舉個例子(由於這傢伙內容可變)

下面這是老掉牙的正常調用了,結果沒毛病接口

clipboard.png

再用默認參數調用三次,看結果就驚呆了,每次出來的結果都記住了上次的內容,這就很尷尬了。

clipboard.png

緣由在於L列表是一個變量並指向[],每調用一次函數就會改變[]裏的內容(上面提過了這裏的內容是可變的),下次再調用的時候,默認參數裏的內容就刷的一下改變了,因此纔會處出現上面尷尬的場景。

有矛就有盾:使用None/str等這些不可變對象來解決問題,使用這些不可變對象能夠大大滴下降修改數據致使的錯誤,更重要的是在多任務環境的狀況下,對象不變,同時讀取對象就不須要加鎖,也不會出現問題。ip

clipboard.png

寫完這頑固不化的默認參數,就輪到靈活多變的可變參數上場了。內存

(2)可變參數:字面上的意思,想要多少個就多少個(0到任意個)

只須要在參數前面加個*就能夠輕鬆搞定啦,來點乾貨:定義一個函數,輸入任意個參數,返回參數數值之和除以字符數的結果。get

clipboard.png

(3)如今能夠坐下來談談關鍵字參數啦

講這個以前先了解一下Python內置字典dict,使用鍵-值(key-value)進行存儲,主要是用來查到內容,講到查找就會不自覺的想起咱們以前相親相愛的list了。

假設說阿里的員工有幾萬人,你要從中查找一我的所對應的工資,那咱們就要先從names中,查找出這我的的名字的位置,而後工資salary中取出相應的工資,這種方式會由於list元素的增長致使查找時間延長;若是用咱們機智的dict,直接用就能夠用名字查找工資,儘管這個表有三千尺,查找速度也是絲絕不會耽擱。

真槍實彈纔是真理:

clipboard.png

這玩意就像字典同樣能夠根據條件查找,也能夠收集新的東西進去。

clipboard.png

而且dict只有一對一的節奏,不帶多對一的形式(key-value)

clipboard.png

字典嘛確定不可能全部東西都能查出來滴,一旦查不出來就得報錯了,因此咱們就要經過一些手段來判斷這個key存不存在了。

(1) 使用dict提供的get()方法判斷key是否存在以及判斷後返回的內容;
(2) 刪除dict中的一個key就使用pop(key)方法。

clipboard.png

clipboard.png

好了這個半路殺出的程咬金就講到這裏,小小的總結一波;

(1) 首先要知道爲甚麼list查找的速度會比dict慢的多,就是你拿着字典爲了找個字一種是一頁一頁翻着找,另外一種是經過偏旁部首去找,顯而易見確定後者更快,因此說list查找和插入的速度,不會由於key賊多就變慢;

(2) 有利就有弊,雖然list在查找和插入的速度方面不討喜,可是人家佔用的空間少那內存基本上就不會浪費了,而dict就是利用空間來換取時間的作法,極其可恥的浪費了極多內存;

(3) 還要注意的是dict中的key必須是不可變對象、不可變對象、不可變對象;

(4) 這個經過key準確計算位置的算法就叫:(Hash)哈希算法。

下面步入正軌
所謂的關鍵字參數呢就是容許你能夠傳入0-N個含參數名的參數(其中還可寫入必選參數),而且這些關鍵字參數會很自覺的組裝成剛剛咱們所講的dict

clipboard.png

這跟可變參數就是一個 和兩個*的區別。

(5)最後一波進攻:命名關鍵字參數

(若是傳入的參數過多,而在調用的時候不須要所有使用就中間插入一個*,後面的參數就是你要調用的,至於前面的就讓他們放飛自我了)

> 要注意的是
(1)使用命名關鍵字參數必需要傳入參數名,不然就得炸了。
(2)若是函數定義中已經有一個可變參數了,後面的命名關鍵字參數就不須要分隔符*了。

下面來個對比操做就一目瞭然了

clipboard.png

直接對*後的參數賦值就會報錯。

clipboard.png

來個大雜燴例子:

clipboard.png

相關文章
相關標籤/搜索