測開之函式進階· 第5篇《偏函式》
阿新 • • 發佈:2020-12-30
## 什麼是偏函式
偏函式在`functools`的模組裡有個`partial`,這個東西就叫做偏函式。
## 怎麼用偏函式?
**當函式的引數個數太多,需要簡化時,使用 functools.partial 可以建立一個新的函式,這個新函式可固定住原函式的部分引數,從而在呼叫時更簡單。**
偏函式可以幫我們固定引數,簡化引數呼叫的流程。如果當前有個介面,去呼叫這個介面的時候,這個介面需要傳 50 個引數,你發現前面 49 個引數都是一樣的不會變化的,這 49 個引數設定成必須要傳的引數,只有一個變化的引數,呼叫的時候非常不方便。
偏函式可以將前面 49 個引數固定住,再次呼叫的時候只需要傳一個引數(只需傳那個變化的引數)。
之前學到的內建函式中`filter`中,呼叫的時候需要傳入 2 個引數,第一個是函式,第二個是需要過濾的可迭代型別的資料。
```PYTHON
# 可以通過傳入不同的過濾條件去過濾出來我們需要的資料
filter(lambda x:x>3,li)
filter(lambda x:x>5,li)
```
用偏函式,程式碼可以這樣寫:
```PYTHON
from functools import partial
# 過濾掉小於5的資料,大於5的資料全部保留下來了
li1 = [1, 2, 3, 11, 22, 33]
li2 = [1, 2, 3, 11, 22, 33]
li3 = [1, 2, 3, 11, 22, 33]
li4 = [1, 2, 3, 11, 22, 33]
li5 = [1, 2, 3, 11, 22, 33]
li6 = [1, 2, 3, 11, 22, 33]
li7 = [1, 2, 3, 11, 22, 33]
# 之前的寫法
# filter(lambda x:x>5,li)
# filter(lambda x:x>5,li2)
# filter(lambda x:x>5,li3)
# filter(lambda x:x>5,li4)
#那麼這個時候每次都要傳入同樣的引數,比較麻煩。
#通過偏函式建立一個新函式,提前傳入原函式所需要的引數,呼叫的時候更簡單。
li = [1, 2, 122, 331, 11, 22, 33, 4, 6, 7, 2, 88, 31]
filter2 = partial(filter, lambda x: x > 5)
res=filter2(li)
print(list(res))
res2=filter2(li2)
print(list(res2))
```
看`functools`的原始碼:
![](https://gitee.com/qinghanstudy/qinghan/raw/master/img/20201228142652.png)
它的意思是不定行引數(隨便多少引數都可以)。
![](https://gitee.com/qinghanstudy/qinghan/raw/master/img/20201228143014.png)
- **鄭重宣告**:公眾號“清菡軟體測試”首發,更多原創文章:清菡軟體測試 114+原創文章,歡迎關注、交流,禁止第三方未經同意擅自轉載。
## 熱文精選
- [我膨脹了,測試必要商城小程式,用了 3 種方式!:)](https://mp.weixin.qq.com/s/vOUangCmD8xowDJIBMMbXg)
- [Appium 之測試微信小程式](https://mp.weixin.qq.com/s/3VNXSJ-Xx7II3upfbtkVXQ)
- [Appium 上下文和 H5 測試(二)](https://mp.weixin.qq.com/s/tedriSZ1LXEXOW8S4LD9Iw)
- [Appium 上下文和 H5 測試(一)](https://mp.weixin.qq.com/s/_l0_CvKn2H4rYnIqiMt87g)
- [從 0 開始用 Hexo 框架搭建個人部落格(無坑版)](https://mp.weixin.qq.com/s/MRMgDJVYKX6GP74eyTD8vQ)
- [Appium 常用操作之「Toast 提示資訊獲取」](https://mp.weixin.qq.com/s/BFcTxsXb78MpuK40J6VjYQ)
- [放假整理的四個知識,附帶小工具](https://mp.weixin.qq.com/s/cLbKoGWNu1lcGWTA1bQ2vA)
- [Appium 常用操作之「元素定位、swipe 滑屏操作」](https://mp.weixin.qq.com/s/laI3KeE2d6Vmlo3UcBDr7w)
- [舉個華為計算器的栗子「Appium 環境配置與除錯 」](https://mp.weixin.qq.com/s/vDLnrW1NbJKqi5PbumLzVQ)
- [Jenkins 持續整合「編譯打包、程式碼檢查、單元測試、環境部署、軟體測試 」](https://mp.weixin.qq.com/s/hnKH2JFxStm0rI10