python一些常用方法_python常用的一些技巧
python常用的一些技巧
1、三目操作符
2、鴨子類型(duck typing)
首先Python不支持多態,也不用支持多態,python是一種多態語言,崇尚鴨子類型。以下是維基百科中對鴨子類型得論述:
在程序設計中,鴨子類型(英語:duck typing)是動態類型的一種風格。在這種風格中,一個對象有效的語義,不是由繼承自特定的類或實現特定的接口,而是由當前方法和屬性的集合決定。這個概念的名字來源于由James Whitcomb Riley提出的鴨子測試,“鴨子測試”可以這樣表述:
“當看到一只鳥走起來像鴨子、游泳起來像鴨子、叫起來也像鴨子,那么這只鳥就可以被稱為鴨子。”
在鴨子類型中,關注的不是對象的類型本身,而是它是如何使用的。
例如,在不使用鴨子類型的語言中,我們可以編寫一個函數,它接受一個類型為鴨的對象,并調用它的走和叫方法。在使用鴨子類型的語言中,這樣的一個函數可以接受一個任意類型的對象,并調用它的走和叫方法。如果這些需要被調用的方法不存在,那么將引發一個運行時錯誤。任何擁有這樣的正確的走和叫方法的對象都可被函數接受的這種行為引出了以上表述,這種決定類型的方式因此得名。
鴨子類型通常得益于不測試方法和函數中參數的類型,而是依賴文檔、清晰的代碼和測試來確保正確使用。從靜態類型語言轉向動態類型語言的用戶通常試圖添加一些靜態的(在運行之前的)類型檢查,從而影響了鴨子類型的益處和可伸縮性,并約束了語言的動態特性(鴨子類型應避免使用type()或isinstance()等測試類型是否合法)。
in_the_forest()函數對參數duck只有一個要求:就是可以實現quack()和feathers()方法。然而Duck類和Person類都實現了quack()和feathers()方法,因此它們的實例對象donald和john都可以用作in_the_forest()的參數,這就是鴨子類型。
可以看出,鴨子類型給予Python這樣的動態語言以多態。但是這種多態的實現完全由程序員來約束強制實現(文檔、清晰的代碼和測試),并沒有語言上的約束(如C++繼承和虛函數)。因此這種方法既靈活,又提高了對程序員的要求。
3、內建函數和lamda
需求:將一個字符串列表中所有滿足包含“result"字段的字符串篩選出來。
4、iterator和generator
generator返回不用return,而用yield。
iterator實現了next()方法和__iter__,__iter__方法返回它自己。而當你調用next()方法時,會返回一個值。通常,這個next值會由generator產生。
換種說法,generator是用來生成iterator的。
那么iterator呢?generator就是用來生成iterator的:
應用的場景:下一次返回的結果依賴于上一次返回的結果。因為yield的作用是每次函數調用執行到這里就停止了,下次調用從yield后面的語句開始。比如說樹的遍歷之類的。
5、bind
bind應用的場景:你寫一個好多參數的函數,先bind一個參數,變成函數A,然后換種方式bind,又變成了函數B。
介紹一個庫是functools,這里只介紹跟bind相似的partial方法。
6、修飾器
1)decorator
修飾器的本質就是對函數做些修飾,然后返回一個函數(callable object)。也就是所謂的高階函數。因此上面的式子直白的寫出來就是:
foo = log(foo)
foo其實就是一個log返回的callable object wrap的別名。
包含內置方法:
1. python有三個內置函數,__set__、__get__、__delete__;
2. 只定義__get__方法,非數據描述器(non-data descriptor);
3. 定義了__delete__ 或者 __set__ 方法的叫做數據描述器(data descriptor);
1. python自動屬性 (python自動生成的屬性,比如__doc__等)
2. 在類(及其祖先類)的__dict__中查找data descriptor,如果存在,返回data descriptor中__get__方法調用的結果
3. 在對象的__dict__中查找
4. 在類(及其祖先類)的__dict__中查找non-data descriptor,存在則返回對應__get__調用的結果
5. 在類(及其祖先類)的__dict__中查找普通屬性
這樣,在原來的屬性查找順序上,我們加上了non-data descriptor和data descriptor,分別插在2、4的位置上。
總結
以上是生活随笔為你收集整理的python一些常用方法_python常用的一些技巧的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python2.x和3.x为什么不兼容_
- 下一篇: websocket python爬虫_p