久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

9個不為人知的Python技巧

 lllsztz 2019-12-18

有很多介紹Python中各種很酷的功能(如變量拆包、偏函數(shù),、枚舉可迭代對象)的文章,但說到Python時,,還有很多東西可以談?wù)?這里我將嘗試展示我所知道和使用的一些特性,我還沒有在其他地方看到有人提到過它們。我們開始吧,。

#清理字符串輸入

對用戶輸入進(jìn)行清理的問題幾乎適用于您編寫的所有程序,。通常情況下,將字符轉(zhuǎn)換為小寫或大寫就足夠了,,有時您可以使用Regex來完成這項工作,,但對于復(fù)雜的情況來說,可能有更好的方法:

在本例中,,您可以看到空白字符“\n”和“\t”已被單個空格替換,,而“\r”已被完全刪除。這是一個簡單的例子,,但是我們可以更進(jìn)一步,使用unicodedata包和它的combining()函數(shù)來生成并進(jìn)行映射,,從而生成更大的重新映射表,,我們可以使用它來刪除字符串中的所有重音。

#對迭代器進(jìn)行切片

如果您嘗試對一個迭代器進(jìn)行切片,,您會得到一個TypeError,,這說明生成器對象是不可下標(biāo)訪問的,但有一個簡單的解決方案可以解決這個問題:

使用itertools.islice我們可以創(chuàng)建一個islice對象,,它是一個會生成所需項的迭代器,。需要注意的是,這將消耗slice開始之前的所有生成器項,,以及islice對象中的所有項,。

#跳過可迭代對象的開始部分

有時您必須處理那些以您不想要的可變數(shù)量的行(如注釋)開始的文件。itertools再次為這個問題提供了簡單的解決方案:

這代碼段只生成初始注釋部分之后的行,。如果我們只想在可迭代對象的開頭丟棄一些項目(本例中是一些行),,并且不知道有多少個項目,,那么這種方法是很有用的。

#只帶有關(guān)鍵字參數(shù)(kwargs)的函數(shù)

在使用以下這樣的函數(shù)時,,創(chuàng)建只接受關(guān)鍵字參數(shù)的函數(shù)來提供(強制)更多的清晰性是很有幫助的:

正如您所看到的,,這可以通過在關(guān)鍵字參數(shù)之前放置單個*參數(shù)來輕松解決。如果我們把位置參數(shù)放在*參數(shù)之前,,位置參數(shù)顯然也會存在,。

#創(chuàng)建支持with語句的對象

例如,我們都知道如何使用with語句來打開文件或獲取鎖,,但是我們可以實現(xiàn)自己的with語句嗎? 當(dāng)然,,我們可以使用__enter__和__exit__方法來實現(xiàn)上下文管理協(xié)議:

這是在Python中實現(xiàn)上下文管理最常見的方法,但是還有更簡單的實現(xiàn)方法:

上面的代碼片段使用contextmanager管理器裝飾器實現(xiàn)了內(nèi)容管理協(xié)議,。在進(jìn)入with塊時,,tag函數(shù)(在yield之前)的第一部分會被執(zhí)行,然后該with塊被執(zhí)行,,最后,,tag函數(shù)的其余部分會被執(zhí)行。

#使用__slots__節(jié)省內(nèi)存

如果您曾經(jīng)編寫過一個創(chuàng)建某個類的大量實例的程序,,您可能會注意到您的程序會突然需要大量內(nèi)存,。這是因為Python使用字典來表示類實例的屬性,這使得它的速度很快,,但是內(nèi)存效率不高,,這通常并不是一個問題。然而,,如果它成為您的程序的一個問題時,,您可以嘗試使用__slots__:

這里的情況是,當(dāng)我們定義了__slots__屬性時,,Python會使用小的固定大小的數(shù)組而不是字典來定義屬性,,這大大減少了每個實例所需的內(nèi)存。使用__slots__也有一些缺點——我們不能聲明任何新的屬性,,并且我們只能使用在__slots__上這些屬性,。而且,帶有__slots__的類不能使用多重繼承,。

#限制CPU和內(nèi)存的使用

如果您不想優(yōu)化您的程序內(nèi)存或CPU使用,,您只想把它限制在某個固定大小的內(nèi)存上,那么Python也有一個這樣的庫來做到這一點:

這里我們可以看到設(shè)置最大CPU運行時間和最大內(nèi)存使用限制的兩個選項,。對于CPU限制,,我們首先獲取特定資源(RLIMIT_CPU)的軟限制和硬限制,然后使用參數(shù)指定的秒數(shù)和前面檢索到的硬限制來設(shè)置它,。最后,,我們注冊信號,,如果CPU時間超過限制,該信號會導(dǎo)致系統(tǒng)退出,。對于內(nèi)存,,我們再次檢索軟限制和硬限制,并使用帶有大小參數(shù)的setrlimit和檢索的硬限制來設(shè)置它,。

>>> 今日簽到口令:d0e1 <<<

#控制什么可以導(dǎo)入,,什么不可以導(dǎo)入

一些語言有非常明顯的導(dǎo)出成員(變量、方法,、接口)的控制機制,,例如Golang,其中只有以大寫字母開頭的成員會被導(dǎo)出,。另一方面,,在Python中,所有東西都可以被導(dǎo)出,,除非我們使用__all__:

根據(jù)上面的代碼片段,,我們知道只有bar函數(shù)會被導(dǎo)出。同樣,,我們可以讓__all__為空,,這樣,當(dāng)我們從這個模塊導(dǎo)入的時候,,任何東西都不會被導(dǎo)出,,并且會導(dǎo)致AttributeError。

#實現(xiàn)比較運算符的簡單方式

考慮到目前已經(jīng)有相當(dāng)多的比較操作符——__lt__ ,、__le__ ,、 __gt__  或 __ge___,因此,,為一個類實現(xiàn)所有的比較操作符是相當(dāng)煩人的,。但如果有更簡單的方法可以實現(xiàn)呢?functools.total_ordering就派上用場了:

那么,這到底是怎么工作的呢?total_ordering裝飾器用于簡化實現(xiàn)類實例排序的過程,。我們只需要定義__lt__和__eq__,它們是剩余操作的映射所需的最小值,,裝飾器就會為我們填充空白,。

#結(jié)論

并不是所有這些特性在日常的Python編程中都是必需的和有用的,但是它們中的一些可能會不時地派上用場,,而且它們還可能會簡化那些在其他情況下會非常冗長和難以實現(xiàn)的任務(wù),。我也想說明的是,所有這些特性是Python標(biāo)準(zhǔn)庫的一部分,而其中的一些在我看來就像標(biāo)準(zhǔn)庫中所具有的相當(dāng)不標(biāo)準(zhǔn)的東西,所以當(dāng)您想使用Python實現(xiàn)某些東西的時候,您首先應(yīng)該去標(biāo)準(zhǔn)庫中尋找它,如果您不能找到它,那么您可能還是不夠努力(如果真的沒有,那它肯定在一些第三方庫中),。

英文原文:https://v/blog/1
譯者:測試

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購買等信息,,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請點擊一鍵舉報,。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多