01 all or any Python之所以成為這么一門受歡迎的語言一個原因是它的可讀性和表達(dá)能力非常強(qiáng)。Python也因此經(jīng)常被調(diào)侃為“可執(zhí)行的偽代碼”。不信你看: 02 bashplotlib 你想要在控制臺繪圖嘛? 現(xiàn)在,你的控制臺中就可以有圖了 03 collections Python有一些很棒的默認(rèn)數(shù)據(jù)類型,但是有時(shí)候他們并不會像你所希望的那樣發(fā)揮作用。 04 dir 面對一個Python對象,你是否曾想過可以直接看到其屬性?你也許可以試試以下的代碼: 這是運(yùn)行Python的時(shí)候一個非常有用的功能,用于動態(tài)探索你所使用的對象和模塊。更多詳情,可以查看這里: https://docs./3/library/functions.html#dir 05 emoji 對的,你沒看錯! 用python來創(chuàng)建表情包,你也可以。 06 from __future__ import Python非常受歡迎,這也就導(dǎo)致了它的版本更新非???,新的版本往往會有很多新特性。你不更新,就無法使用。 然而,不要害怕。__future__ 模塊可以讓你導(dǎo)入未來版本的功能。有點(diǎn)像時(shí)空穿梭有木有! 07 geopy 對于程序猿來說地理可能是一個非常有挑戰(zhàn)性的領(lǐng)域。但是,geopy模塊則讓它變得非常簡單。 它通過提取一系列不同地理編碼服務(wù)的api來工作,讓你能夠獲得一個地方的完整街道地址、緯度、經(jīng)度,甚至海拔。 這里面同時(shí)還包含一個有用的“距離”類別。它能使用你選定的度量去計(jì)算了兩個地點(diǎn)之間的距離。 08 howdoi 有時(shí)候你碰到了一個編程問題,覺得自己之前明明見過它的解決方法,但是卻記不起來具體是怎么樣的了。于是你想要去StackOverflow上找,但又不想離開這個終端。這個時(shí)候,你需要下面這個工具——howdoi 你所遇到的任何問題都可以問它,它會盡他所能給你返回一個答案。 需要注意的是——它只從StackOverflow最頂端的答案中抓取代碼。所以它給你返回的不總是最有用的信息... 09 inspect Python的inspect模塊用于收集Python對象的信息,可以獲取類或函數(shù)的參數(shù)的信息,源碼,解析堆棧等等。 下方的代碼樣例使用了 inspect.getsource() 來打印它自身的源碼。同樣還使用了 inspect.getmodule()來打印定義了inspect.getmodule()的模塊。最后一行代碼則是打印了本行代碼所在的行號。在本例中,就是 4 。 inspect模塊可以有效地讓你知道你的代碼是如何工作的,你也可以利用它來完成一些個人的源碼。 10 Jedi Jedi庫是一個代碼自動補(bǔ)齊和靜態(tài)分析的庫。它可以使你更快更高效地書寫代碼。 你可能已經(jīng)正在使用Jedi而只是沒發(fā)現(xiàn)。IPython項(xiàng)目就是利用Jedi來實(shí)現(xiàn)其自動補(bǔ)全功能。 11 **kwargs 無論你學(xué)習(xí)那種語言,在這條學(xué)習(xí)之路上總有那么一些里程碑。在Python的編程學(xué)習(xí)中,理解神秘的**kwargs語法應(yīng)該算是一個重要的里程碑。 雙星“**”放在字典的前面可以讓你將字典的內(nèi)容作為命名參數(shù)傳遞給函數(shù)。字典的鍵是參數(shù)的名字,鍵的值作為參數(shù)的值傳遞給函數(shù)。如下所示: 當(dāng)你想要創(chuàng)建一個函數(shù),它需要能處理事先沒有定義過的參數(shù),那么就要用到前面提到的技巧了。 12 List comprehensions List comprehensions(列表推導(dǎo)式)可以說是我最喜歡的Python技巧之一。這種表達(dá)式可以讓你寫出像自然語言一樣易于理解并且還很簡潔的代碼。 你可以通過這個鏈接了解更多關(guān)于列表推導(dǎo)式的用法。地址: https://www.learn/en/List_Comprehensions 13 map Python有許多非常有用的內(nèi)置函數(shù)。其中一個就是map()——特別是和lambda函數(shù)相結(jié)合的時(shí)候。 在這個例子中,map()對x中的每一個元素都應(yīng)用了一個簡單的lambda函數(shù)。它會返回一個map對象,這個對象可以被轉(zhuǎn)化成可迭代對象,如列表或者元組。 14 newspaper3k newspaper3k,如果你還沒有見過它,那么你可能會被這個Python newspaper模塊所驚艷到。 15 Operator overloading(操作符重載) Python支持操作符重載?!安僮鞣剌d”其實(shí)是個簡單的概念,你是否曾經(jīng)想過為什么Python可以讓你使用“+”操作符來同時(shí)實(shí)現(xiàn)加法和連接字符串?這就是操作符重載在發(fā)揮作用。 你可以定義使用Python標(biāo)準(zhǔn)操作符符號的對象,這可以讓你在特定的環(huán)境中使用特定的對象,就像下方的例子一樣。 16 pprint Python的默認(rèn)print函數(shù)可以滿足日常的輸出任務(wù),但如果要打印更大的、嵌套式的對象,那么使用默認(rèn)的print函數(shù)打印出來的內(nèi)容會很丑陋。 這個時(shí)候我們就需要pprint了,它可以讓復(fù)雜的結(jié)構(gòu)型對象以可讀性更強(qiáng)的格式顯示。這對于經(jīng)常要面對非普通數(shù)據(jù)結(jié)構(gòu)的Python開發(fā)者來說是必不可少的工具。 17 Queue(隊(duì)列) Python支持多線程,它是通過標(biāo)準(zhǔn)庫中的Queue模塊來實(shí)現(xiàn)的。這個模塊可以讓你實(shí)現(xiàn)隊(duì)列數(shù)據(jù)結(jié)構(gòu)。這種數(shù)據(jù)結(jié)構(gòu)可以讓你根據(jù)特定的規(guī)則添加和檢索條目。 “先進(jìn)先出”(FIFO)隊(duì)列可以讓你按照添加對象的順序來檢索他們?!昂筮M(jìn)先出”(LIFO)隊(duì)列可以讓你首先訪問最近添加的對象。最后,優(yōu)先隊(duì)列可以讓你根據(jù)他們排序的順序進(jìn)行檢索。 18 __repr__ 當(dāng)你定義一個類的時(shí)候,提供一個方法可以返回用來表示該類對象的可打印字符串會非常有用。例如: 這使得debug更加方便,具體的定義方式如下: 19 sh sh庫讓你像調(diào)用方法那樣調(diào)用系統(tǒng)中的命令。 20 Type hints(類型提示) Python是一種動態(tài)類型語言。當(dāng)你定義變量、函數(shù)、類別的時(shí)候,你不需要指定數(shù)據(jù)的類型。這可以大大提升你的開發(fā)速度,但也是有代價(jià)的。你可能會因?yàn)橐粋€簡單的輸入問題而導(dǎo)致運(yùn)行出錯。 在Python3.5之后,這就不是問題了,在定義函數(shù)的時(shí)候你可以自主選擇要不要提供類型提示。 你還可以定義類型的別名: 雖然不是強(qiáng)制性的,類型注釋可以讓你的代碼理解起來更加簡單。它們也允許你使用類型檢測工具在運(yùn)行之前捕獲這些零散的類型錯誤。如果你正在從事大型、復(fù)雜的項(xiàng)目,那么類型注釋也許會非常有幫助 21 uuid 通過Python標(biāo)準(zhǔn)庫中的uuid模塊,可以快速并簡單地生成統(tǒng)一的唯一ID(又稱UUID). UUID是128位的全局唯一標(biāo)識符,通常由32字節(jié)的字符串表示。它可以保證時(shí)間和空間的唯一性,也稱為GUID,全稱為:UUID —— Universally Unique IDentifier,Python 中叫 UUID。它通過MAC地址、時(shí)間戳、命名空間、隨機(jī)數(shù)、偽隨機(jī)數(shù)來保證生成ID的唯一性。 22 Virtual environments 這可能是我最喜歡的Python技巧了。你可能經(jīng)常要處理不止一個Python項(xiàng)目,不幸的是,有時(shí)候不同項(xiàng)目會依賴不同的Python版本。這個時(shí)候,你應(yīng)該在系統(tǒng)里安裝哪個Python版本呢? 幸運(yùn)的是,Python可以支持建立不同的虛擬環(huán)境來滿足不同的版本需求。 現(xiàn)在你可以在一臺機(jī)器上安裝和運(yùn)行各個獨(dú)立版本的Python。太棒了! 23 wikipedia Wikipedia有一個很棒的API,它可以讓用戶通過編程訪問到維基的詞條內(nèi)容。使用Python中的wikipedia模塊可以讓你以最便捷的方式訪問該API。 與真實(shí)站點(diǎn)一樣,該模塊支持多種語言、頁面消除歧義、隨機(jī)頁面檢索,甚至還有donate()方法。 24 xkcd(著名Python漫畫) 幽默是Python語言的一個重要特性——畢竟,它是以英國喜劇小品節(jié)目《Monty Python’s Flying Circus》(《蒙提·派森的飛行馬戲團(tuán)》)命名的。Python的許多官方文檔都引用了該劇中的著名情節(jié)。 這種幽默感不僅在文檔中可以找到,不信,你可以試試運(yùn)行下方的代碼: 你將打開蘭道爾·門羅的著名幽默漫畫《xkcd》:) 25 YAML YAML是“YAML不是一種標(biāo)記語言”的外語縮寫。它是一個數(shù)據(jù)格式語言,是JSON的父集。和JSON不同的是,它可以存儲更復(fù)雜的對象,并且可以引用自身的元素。你還可以寫注釋,這讓YAML特別適合于書寫配置文件。 PyYAML模塊可以讓你使用Python調(diào)用YAML。使用下列語句安裝: 然后導(dǎo)入到項(xiàng)目中: PyYAML 使你能夠儲存任何數(shù)據(jù)類型的Python對象,以及任何用戶定義類的實(shí)例。 26 zip 最后一個技巧也非??帷D闶欠裨胍寖蓚€列表中的元素逐個映射,組合成字典?那么你應(yīng)該使用zip。 內(nèi)置函數(shù)zip()接收若干可迭代對象,然后返回一個由多個元組組成的列表。每個元組根據(jù)輸入對象的位置索引對其元素進(jìn)行分組。還可以使用*zip()來“解壓”對象。 以上就是我想要呈現(xiàn)的所有Python技巧,感謝閱讀,希望大家能從中找到對自己有幫助的技巧。 |
|