精品专区-精品自拍9-精品自拍三级乱伦-精品自拍视频-精品自拍视频曝光-精品自拍小视频

網站建設資訊

NEWS

網站建設資訊

封裝函數python 封裝函數與調用

將下面Python代碼封裝成函數

Python:常用函數封裝:

在榆林等地區,都構建了全面的區域性戰略布局,加強發展的系統性、市場前瞻性、產品創新能力,以專注、極致的服務理念,為客戶提供成都做網站、網站設計 網站設計制作按需網站建設,公司網站建設,企業網站建設,品牌網站建設,成都營銷網站建設,成都外貿網站建設,榆林網站建設費用合理。

def is_chinese(uchar):

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

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

return True

else:

return False

def is_number(uchar):

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

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):

"""判斷是否非漢字,數字和英文字符"""

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

return True

else:

return False

def B2Q(uchar):

"""半角轉全角"""

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):

"""全角轉半角"""

inside_code=ord(uchar)

if inside_code==0x3000:

inside_code=0x0020

else:

inside_code-=0xfee0

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

return uchar

return unichr(inside_code)

def stringQ2B(ustring):

"""把字符串全角轉半角"""

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

def uniform(ustring):

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

return stringQ2B(ustring).lower()

def string2List(ustring):

"""將ustring按照中文,字母,數字分開"""

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怎么讀封裝函數

封裝其實分為兩個層面,但無論哪種層面的封裝,都要對外界提供好訪問你內部隱藏內容的接口(接口可以理解為入口,有了這個入口,使用者無需且不能夠直接訪問到內部隱藏的細節,只能走接口,并且我們可以在接口的實現上附加更多的處理邏輯,從而嚴格控制使用者的訪問)

第一個層面的封裝(什么都不用做):創建類和對象會分別創建二者的名稱空間,我們只能用類名.或者obj.的方式去訪問里面的名字,這本身就是一種封裝。print(m1.brand) #實例化對象(m1.)

print(motor_vehicle.tag) #類名(motor_vehicle.)

-------------輸出結果---------注意:對于這一層面的封裝(隱藏),類名.和實例名.就是訪問隱藏屬性的接口

第二個層面的封裝:類中把某些屬性和方法隱藏起來(或者說定義成私有的),只在類的內部使用、外部無法訪問,或者留下少量接口(函數)供外部訪問。

Python中私有化的方法也比較簡單,即在準備私有化的屬性(包括方法、數據)名字前面加兩個下劃線即可。

使用python簡單封裝selenium常用函數

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

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

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

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

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

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

強制等待

直接調用系統time.sleep函數,不管頁面加載情況一定會等待指定的時間, 即使元素已被加載 。

1.如果設置的時間較長,會浪費時間

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

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

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

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

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

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

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

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

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

同樣的,采用裝飾器對其他常用的函數進行封裝,例如強制等待、點擊、輸入文本等。

裝飾器雖然很方便,但也會產生一些麻煩。例如在find_element函數遞歸調用過程中,理應只要執行一次裝飾器函數。但因為裝飾器已經裝飾完畢,導致每次遞歸都會執行。例如強制等待的sleep函數,如果遞歸次數越多等待時間越長。

解除裝飾器一般有兩種做法:一是約定參數,當遞歸第二次調用時則不生效。例如

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

二是采用裝飾器采用wrapped實現,通過訪問wrapped屬性獲得原始函數。例如

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

最后整體代碼如下

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

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

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

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

4.不利于擴展和維護,當功能過多時find_element的參數過于龐大。

如果只是簡單地封裝和使用,上面這種方式也能達到較好的效果。如果想進一步封裝,建議采用鏈式調用方式,裝飾器輔助封裝。例如

這樣函數的擴展性和可閱讀性有較大的提升

python如何封裝函數

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

在另一個文件中導入這個那個py包,調用類和方法

就是封裝了

python 函數如何封裝?

不是不可以,只是這樣做沒有意義,另外變量作用域的問題,會使得操作變得很復雜


網站欄目:封裝函數python 封裝函數與調用
瀏覽路徑:http://m.jcarcd.cn/article/hgoeod.html
主站蜘蛛池模板: 日本伊人色综合网 | 拍拍拍无挡国产精品 | 福利精品视频导航 | 国产精品在线系列 | 国产日本欧美精品 | 97精品久 | 国产精品高清在线看 | 精品小说网 | 91香蕉在线播放 | 国产午夜亚洲第一 | 97超级碰 | 变态国产欧美激情成 | 国产香港日 | 国产精品一二三四 | 国产欧美激情亚洲情 | 国产精品婷婷午夜 | 亚洲无码 | 日韩欧美午夜大片 | 国产精品免费 | 国产精选在线视频 | 国产午夜 | 91免费在线看 | 国产乱轮在线观看 | 韩国午夜福利影院 | 国产又猛又黄又爽 | 午夜成人精品网站 | 国产乱伦高清影视 | 国产对白在线观 | 成人一在线视频 | 国产片免费 | 天美传媒精品 | 欧美影院一区 | 国产亚洲老熟女视频 | 国产一区丝袜在线 | 韩日成人| 国产盗摄老牛影视 | 最新的国产成人精品2025 | 无码h黄肉动漫在线观看网站 | 成人性爱视频在 | 日本在线看片 | 精品国产高清自在 |