内射老阿姨1区2区3区4区_久久精品人人做人人爽电影蜜月_久久国产精品亚洲77777_99精品又大又爽又粗少妇毛片

python的函數(shù)封裝 python函數(shù)封裝用戶登錄

將下面Python代碼封裝成函數(shù)

Python:常用函數(shù)封裝:

創(chuàng)新互聯(lián)建站專注于洱源企業(yè)網(wǎng)站建設(shè),響應(yīng)式網(wǎng)站開發(fā),成都做商城網(wǎng)站。洱源網(wǎng)站建設(shè)公司,為洱源等地區(qū)提供建站服務(wù)。全流程按需定制,專業(yè)設(shè)計,全程項目跟蹤,創(chuàng)新互聯(lián)建站專業(yè)和態(tài)度為您提供的服務(wù)

def is_chinese(uchar):

"""判斷一個unicode是否是漢字"""

if uchar = u'\u4e00' and uchar=u'\u9fa5':

return True

else:

return False

def is_number(uchar):

"""判斷一個unicode是否是數(shù)字"""

if uchar = u'\u0030' and uchar=u'\u0039':

return True

else:

return False

def is_alphabet(uchar):

"""判斷一個unicode是否是英文字母"""

if (uchar = u'\u0041' and uchar=u'\u005a') or (uchar = u'\u0061' and uchar=u'\u007a'):

return True

else:

return False

def is_other(uchar):

"""判斷是否非漢字,數(shù)字和英文字符"""

if not (is_chinese(uchar) or is_number(uchar) or is_alphabet(uchar)):

return True

else:

return False

def B2Q(uchar):

"""半角轉(zhuǎn)全角"""

inside_code=ord(uchar)

if inside_code0x0020 or inside_code0x7e: #不是半角字符就返回原來的字符

return uchar

if inside_code==0x0020: #除了空格其他的全角半角的公式為:半角=全角-0xfee0

inside_code=0x3000

else:

inside_code+=0xfee0

return unichr(inside_code)

def Q2B(uchar):

"""全角轉(zhuǎn)半角"""

inside_code=ord(uchar)

if inside_code==0x3000:

inside_code=0x0020

else:

inside_code-=0xfee0

if inside_code0x0020 or inside_code0x7e: #轉(zhuǎn)完之后不是半角字符返回原來的字符

return uchar

return unichr(inside_code)

def stringQ2B(ustring):

"""把字符串全角轉(zhuǎn)半角"""

return "".join([Q2B(uchar) for uchar in ustring])

def uniform(ustring):

"""格式化字符串,完成全角轉(zhuǎn)半角,大寫轉(zhuǎn)小寫的工作"""

return stringQ2B(ustring).lower()

def string2List(ustring):

"""將ustring按照中文,字母,數(shù)字分開"""

retList=[]

utmp=[]

for uchar in ustring:

if is_other(uchar):

if len(utmp)==0:

continue

else:

retList.append("".join(utmp))

utmp=[]

else:

utmp.append(uchar)

if len(utmp)!=0:

retList.append("".join(utmp))

return retList

python如何封裝函數(shù)

可以定義一個類,類里定義很多函數(shù)(主要用它做什么)或直接定義函數(shù)在一個py文件中

在另一個文件中導(dǎo)入這個那個py包,調(diào)用類和方法

就是封裝了

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

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

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

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

我們以163網(wǎng)址上的登錄框為例:點擊登錄按鈕,彈出登錄iframe頁面。輸入框位置在iframe中,因此我們不能使用xpath獲取元素位置,需要進(jìn)入iframe中,然后獲取元素。

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

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

強(qiáng)制等待

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

1.如果設(shè)置的時間較長,會浪費時間

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

最后整體代碼如下

這次的封裝其實還存在很多問題

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

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

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

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

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

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

python中封裝的優(yōu)缺點

1 封裝概述

封裝(Encapsulation),指的是在設(shè)計類時, 將不需要對外提供的內(nèi)容都隱藏起來,提供公共方法以供外部對其訪問。

具體指的是刻意地將一些屬性和方法隱藏(私有化)在類的內(nèi)部,這樣在使用此類時,將無法直接以類對象.屬性名、或 類對象.方法名(參數(shù)) 的形式調(diào)用這些私有屬性或私有方法,而只能用未隱藏的公有方法間接操作這些隱藏的私有屬性和私有方法。

封裝的優(yōu)點,如下所示:

封裝保證了類內(nèi)部數(shù)據(jù)結(jié)構(gòu)的完整性:封裝之后,用戶無法直接看到類中的數(shù)據(jù)結(jié)構(gòu),只能使用類允許公開的數(shù)據(jù)(通常指公有方法),很好地避免了外部對內(nèi)部數(shù)據(jù)的影響,提高了程序的可維護(hù)性。

封裝數(shù)據(jù)可以很好的保護(hù)隱私。

封裝方法的主要原因是隔離復(fù)雜度。

封裝提高了代碼的復(fù)用性。

還可以輕松實現(xiàn)避免用戶對類中屬性和方法的不合理操作:用戶只能借助暴露出來的類方法來訪問數(shù)據(jù),我們只需要在這些暴露的方法中加入適當(dāng)?shù)目刂七壿?,即可輕松實現(xiàn)用戶對類中屬性或方法的不合理操作。

2 Python 類的簡單封裝

為了實現(xiàn) Python 類的封裝,Python 采取了下面的方法:

公有(共有):默認(rèn)情況下,類中的變量和方法都是公有的,它們的名稱前都沒有下劃線,公有的變量和方法,在類的外部、類內(nèi)部以及子類中,都可以正常訪問。

私有:類中的變量或方法以雙下劃線 __ 開頭命名,則該變量或方法為私有的,私有的變量或方法,只能在本類內(nèi)部使用,類的外部以及子類都無法使用。

也有把變量名或方法名以單下劃線 _ 開頭定義的,通常也表示私有的。

python 如何封裝在某帶參數(shù)函數(shù)之后等待時間?

題主你好,

方法及相應(yīng)代碼見截圖:

*.方法不只一種, 題主看看如果不合適請追問. 上面這種做法的好處是封裝的這個函數(shù)func可以帶任意多個位置參數(shù).? //就圖主的問題來看, *args就夠了, 如果func函數(shù)中還有關(guān)鍵字參數(shù),則還需要使用**argv.

-----

希望可以幫到題主, 歡迎追問

文章標(biāo)題:python的函數(shù)封裝 python函數(shù)封裝用戶登錄
標(biāo)題URL:http://m.rwnh.cn/article30/doopipo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站建設(shè)、全網(wǎng)營銷推廣、網(wǎng)站排名、網(wǎng)站營銷微信小程序、手機(jī)網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站建設(shè)網(wǎng)站維護(hù)公司
荆州市| 高陵县| 南康市| 乌兰县| 平江县| 平度市| 沅陵县| 定日县| 敖汉旗| 固阳县| 峨眉山市| 岐山县| 金昌市| 当涂县| 行唐县| 双城市| 安陆市| 洪洞县| 措勤县| 冷水江市| 桐庐县| 津市市| 铁力市| 新津县| 延安市| 绥棱县| 四会市| 鄂温| 宝应县| 武宣县| 普洱| 怀来县| 长春市| 泰来县| 湘阴县| 洛南县| 治多县| 天等县| 伊金霍洛旗| 长垣县| 通化市|