真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

python簡(jiǎn)單函數(shù)代碼 Python函數(shù)大全

Python 之內(nèi)置函數(shù):filter、map、reduce、zip、enumerate

這幾個(gè)函數(shù)在 Python 里面被稱為高階函數(shù),本文主要學(xué)習(xí)它們的用法。

公司主營(yíng)業(yè)務(wù):成都網(wǎng)站設(shè)計(jì)、做網(wǎng)站、移動(dòng)網(wǎng)站開發(fā)等業(yè)務(wù)。幫助企業(yè)客戶真正實(shí)現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競(jìng)爭(zhēng)能力。創(chuàng)新互聯(lián)是一支青春激揚(yáng)、勤奮敬業(yè)、活力青春激揚(yáng)、勤奮敬業(yè)、活力澎湃、和諧高效的團(tuán)隊(duì)。公司秉承以“開放、自由、嚴(yán)謹(jǐn)、自律”為核心的企業(yè)文化,感謝他們對(duì)我們的高要求,感謝他們從不同領(lǐng)域給我們帶來(lái)的挑戰(zhàn),讓我們激情的團(tuán)隊(duì)有機(jī)會(huì)用頭腦與智慧不斷的給客戶帶來(lái)驚喜。創(chuàng)新互聯(lián)推出浦口免費(fèi)做網(wǎng)站回饋大家。

filter 函數(shù)原型如下:

第一個(gè)參數(shù)是判斷函數(shù)(返回結(jié)果需要是 True 或者 False),第二個(gè)為序列,該函數(shù)將對(duì) iterable 序列依次執(zhí)行 function(item) 操作,返回結(jié)果是過(guò)濾之后結(jié)果組成的序列。

簡(jiǎn)單記憶:對(duì)序列中的元素進(jìn)行篩選,獲取符合條件的序列。

返回結(jié)果為: ,使用 list 函數(shù)可以輸入序列內(nèi)容。

map 函數(shù)原型如下:

該函數(shù)運(yùn)行之后生成一個(gè) list,第一個(gè)參數(shù)是函數(shù)、第二個(gè)參數(shù)是一個(gè)或多個(gè)序列;

下述代碼是一個(gè)簡(jiǎn)單的測(cè)試案例:

上述代碼運(yùn)行完畢,得到的結(jié)果是: 。使用 print(list(my_new_list)) 可以得到結(jié)果。

map 函數(shù)的第一個(gè)參數(shù),可以有多個(gè)參數(shù),當(dāng)這種情況出現(xiàn)后,后面的第二個(gè)參數(shù)需要是多個(gè)序列。

map 函數(shù)解決的問(wèn)題:

reduce 函數(shù)原型如下:

第一個(gè)參數(shù)是函數(shù),第二個(gè)參數(shù)是序列,返回計(jì)算結(jié)果之后的值。該函數(shù)價(jià)值在于滾動(dòng)計(jì)算應(yīng)用于列表中的連續(xù)值。

測(cè)試代碼如下:

最終的結(jié)果是 6,如果設(shè)置第三個(gè)參數(shù)為 4,可以運(yùn)行代碼查看結(jié)果,最后得到的結(jié)論是,第三個(gè)參數(shù)表示初始值,即累加操作初始的數(shù)值。

簡(jiǎn)單記憶:對(duì)序列內(nèi)所有元素進(jìn)行累計(jì)操作。

zip 函數(shù)原型如下:

zip 函數(shù)將可迭代的對(duì)象作為參數(shù),將對(duì)象中對(duì)應(yīng)的元素打包成一個(gè)個(gè)元組,然后返回由這些元組組成的列表。

如果各個(gè)迭代器的元素個(gè)數(shù)不一樣,則返回列表長(zhǎng)度與最短的對(duì)象相同,利用星號(hào)( * )操作符,可以將元組解壓為列表。

測(cè)試代碼如下:

展示如何利用 * 操作符:

輸出結(jié)果如下:

簡(jiǎn)單記憶:zip 的功能是映射多個(gè)容器的相似索引,可以方便用于來(lái)構(gòu)造字典。

enumerate 函數(shù)原型如下:

參數(shù)說(shuō)明:

該函數(shù)用于將一個(gè)可遍歷的數(shù)據(jù)對(duì)象組合為一個(gè)索引序列,同時(shí)列出數(shù)據(jù)和數(shù)據(jù)下標(biāo),一般用在 for 循環(huán)當(dāng)中。

測(cè)試代碼如下:

返回結(jié)果為: 。

本文涉及的函數(shù)可以與 lambda 表達(dá)式進(jìn)行結(jié)合,能大幅度提高編碼效率。最好的學(xué)習(xí)資料永遠(yuǎn)是官方手冊(cè)

使用python簡(jiǎn)單封裝selenium常用函數(shù)

年前走查腳本代碼時(shí),發(fā)現(xiàn)大家對(duì)selenium功能都在重復(fù)造輪子,而且容易出現(xiàn)一些常見(jiàn)低級(jí)bug。于是在閑暇之余,封裝一些常用的selenium功能。

在某些網(wǎng)頁(yè)中,存在多個(gè)frame嵌套。而selenium提供的find_element函數(shù)只能在當(dāng)前frame中查找,不能切換到其他frame中,需要從最上級(jí)frame中逐步切換(當(dāng)然也可以指定xpath的絕對(duì)路徑,但是一般沒(méi)人這么做)。在我們寫代碼過(guò)程中,需要明確知道當(dāng)前frame位置和需要尋找元素的frame位置。在frame切換過(guò)程中,容易因?yàn)槭韬鰧?dǎo)致frame切換錯(cuò)誤導(dǎo)致元素?zé)o法找到的bug。

頁(yè)面中分布的frame,可以理解為樹狀結(jié)構(gòu)。因此我們可以采用遞歸的方式, 沿著某條搜索路線frame節(jié)點(diǎn),依次對(duì)樹中每個(gè)節(jié)點(diǎn)均做一次訪問(wèn)。

我們以163網(wǎng)址上的登錄框?yàn)槔狐c(diǎn)擊登錄按鈕,彈出登錄iframe頁(yè)面。輸入框位置在iframe中,因此我們不能使用xpath獲取元素位置,需要進(jìn)入iframe中,然后獲取元素。

手動(dòng)切換ifame可能會(huì)產(chǎn)生bug,因此需要一套自動(dòng)切換和檢索frame的機(jī)制。具體代碼如下:

需要注意的是:如果頁(yè)面中多個(gè)frame中,存在相同的xpath元素。還是需要指定frame的路徑,否則會(huì)返回搜索到的第一個(gè)元素。

強(qiáng)制等待

直接調(diào)用系統(tǒng)time.sleep函數(shù),不管頁(yè)面加載情況一定會(huì)等待指定的時(shí)間, 即使元素已被加載 。

1.如果設(shè)置的時(shí)間較長(zhǎng),會(huì)浪費(fèi)時(shí)間

2.如果設(shè)置的時(shí)間較短,元素可能沒(méi)有加載。

頁(yè)面中某元素如果未能立即加載,隱式等待告訴WebDriver需等待一定的時(shí)間,然后去查找元素。默認(rèn)不等待,隱式等待作用于整個(gè)WebDriver周期,只需設(shè)置一次即可。

1.在上文的find_element函數(shù)中,采用遞歸方式在所有frame尋找元素。若采用隱式等待,則在每個(gè)frame中都需要等待設(shè)定的時(shí)間,耗時(shí)非常長(zhǎng)。

2.某些頁(yè)面我們想要的元素已經(jīng)加載完畢,但是部分其他資源未加載。隱式等待必須等待所有元素加載完畢,增加額外等待時(shí)間。

顯示等待一般作用于某一個(gè)元素,在設(shè)定的時(shí)間范圍內(nèi),默認(rèn)每間隔0.5秒查找元素。返回被加載的元素,若超過(guò)設(shè)定的時(shí)間范圍未能查找則報(bào)錯(cuò)。顯示等待作為selenium常用的等待機(jī)制,我們來(lái)看下他的源碼和機(jī)制。

driver 注釋中解釋為WebDriver實(shí)例,但是代碼中并未有相關(guān)檢測(cè),因此可以傳入任何對(duì)象

但是__repr__函數(shù)中使用到session_id屬性,如果需要顯示屬性或者轉(zhuǎn)為str對(duì)象,最好在driver對(duì)象中添加session_id屬性

在until函數(shù)中,我們可以看到driver對(duì)象傳入method函數(shù)。在計(jì)時(shí)結(jié)束前,在不斷循環(huán)執(zhí)行method函數(shù),如果method函數(shù)有正常返回值則退出循環(huán),否則報(bào)TimeoutException錯(cuò)誤。

可以采用裝飾器對(duì)隱式等待進(jìn)行封裝,這樣代碼更加精簡(jiǎn)

同樣的,采用裝飾器對(duì)其他常用的函數(shù)進(jìn)行封裝,例如強(qiáng)制等待、點(diǎn)擊、輸入文本等。

裝飾器雖然很方便,但也會(huì)產(chǎn)生一些麻煩。例如在find_element函數(shù)遞歸調(diào)用過(guò)程中,理應(yīng)只要執(zhí)行一次裝飾器函數(shù)。但因?yàn)檠b飾器已經(jīng)裝飾完畢,導(dǎo)致每次遞歸都會(huì)執(zhí)行。例如強(qiáng)制等待的sleep函數(shù),如果遞歸次數(shù)越多等待時(shí)間越長(zhǎng)。

解除裝飾器一般有兩種做法:一是約定參數(shù),當(dāng)遞歸第二次調(diào)用時(shí)則不生效。例如

這種方式實(shí)現(xiàn)簡(jiǎn)單,容易理解。但是增加了參數(shù)限制,在fun函數(shù)中就不能使用first_sleep參數(shù)。

二是采用裝飾器采用wrapped實(shí)現(xiàn),通過(guò)訪問(wèn)wrapped屬性獲得原始函數(shù)。例如

但是某一個(gè)函數(shù)被多個(gè)裝飾器裝飾時(shí),需要遞歸解除裝飾器。例如

最后整體代碼如下

這次的封裝其實(shí)還存在很多問(wèn)題

1.find_element函數(shù)不僅僅只是提供查找元素功能,還提供一些其他功能,因此叫element_operation更為合適。

2.find_element函數(shù)的參數(shù)過(guò)多,并且很多參數(shù)的使用并不在函數(shù)本身中,對(duì)代碼閱讀很不友好。

3.得小心避免參數(shù)重復(fù)問(wèn)題,假設(shè)裝飾器sleep和裝飾器wait_time都使用time這個(gè)參數(shù),將無(wú)法區(qū)分具體是哪個(gè)函數(shù)使用。

4.不利于擴(kuò)展和維護(hù),當(dāng)功能過(guò)多時(shí)find_element的參數(shù)過(guò)于龐大。

如果只是簡(jiǎn)單地封裝和使用,上面這種方式也能達(dá)到較好的效果。如果想進(jìn)一步封裝,建議采用鏈?zhǔn)秸{(diào)用方式,裝飾器輔助封裝。例如

這樣函數(shù)的擴(kuò)展性和可閱讀性有較大的提升

Python函數(shù)簡(jiǎn)單Demo案例

目錄

一、寫一個(gè)函數(shù)求三個(gè)數(shù)的和,并返回結(jié)果

二、寫一個(gè)函數(shù)求三個(gè)數(shù)的平均值,并返回結(jié)果

三、再寫一個(gè)函數(shù)求每個(gè)數(shù)與平均值之間的差,并返回結(jié)果


本文名稱:python簡(jiǎn)單函數(shù)代碼 Python函數(shù)大全
文章轉(zhuǎn)載:http://weahome.cn/article/doocpsg.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部