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