<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          新手必會(huì)的 9 個(gè) Python 技巧!

          共 3014字,需瀏覽 7分鐘

           ·

          2021-06-19 15:17

          點(diǎn)擊上方小白學(xué)視覺”,選擇加"星標(biāo)"或“置頂

          重磅干貨,第一時(shí)間送達(dá)

          本文轉(zhuǎn)自|機(jī)器學(xué)習(xí)算法那些事
          英文原文:https://martinheinz.dev/blog/1
          譯者:測(cè)試

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

          清理字符串輸入


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


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

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


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


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

          跳過可迭代對(duì)象的開始部分


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


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

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


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


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

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


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


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


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

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


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


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

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


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


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


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


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


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

          實(shí)現(xiàn)比較運(yùn)算符的簡(jiǎn)單方式


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


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

          結(jié)論


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

          下載1:OpenCV-Contrib擴(kuò)展模塊中文版教程
          在「小白學(xué)視覺」公眾號(hào)后臺(tái)回復(fù):擴(kuò)展模塊中文教程即可下載全網(wǎng)第一份OpenCV擴(kuò)展模塊教程中文版,涵蓋擴(kuò)展模塊安裝、SFM算法、立體視覺、目標(biāo)跟蹤、生物視覺、超分辨率處理等二十多章內(nèi)容。

          下載2:Python視覺實(shí)戰(zhàn)項(xiàng)目52講
          小白學(xué)視覺公眾號(hào)后臺(tái)回復(fù):Python視覺實(shí)戰(zhàn)項(xiàng)目,即可下載包括圖像分割、口罩檢測(cè)、車道線檢測(cè)、車輛計(jì)數(shù)、添加眼線、車牌識(shí)別、字符識(shí)別、情緒檢測(cè)、文本內(nèi)容提取、面部識(shí)別等31個(gè)視覺實(shí)戰(zhàn)項(xiàng)目,助力快速學(xué)校計(jì)算機(jī)視覺。

          下載3:OpenCV實(shí)戰(zhàn)項(xiàng)目20講
          小白學(xué)視覺公眾號(hào)后臺(tái)回復(fù):OpenCV實(shí)戰(zhàn)項(xiàng)目20講,即可下載含有20個(gè)基于OpenCV實(shí)現(xiàn)20個(gè)實(shí)戰(zhàn)項(xiàng)目,實(shí)現(xiàn)OpenCV學(xué)習(xí)進(jìn)階。

          交流群


          歡迎加入公眾號(hào)讀者群一起和同行交流,目前有SLAM、三維視覺、傳感器、自動(dòng)駕駛、計(jì)算攝影、檢測(cè)、分割、識(shí)別、醫(yī)學(xué)影像、GAN、算法競(jìng)賽等微信群(以后會(huì)逐漸細(xì)分),請(qǐng)掃描下面微信號(hào)加群,備注:”昵稱+學(xué)校/公司+研究方向“,例如:”張三 + 上海交大 + 視覺SLAM“。請(qǐng)按照格式備注,否則不予通過。添加成功后會(huì)根據(jù)研究方向邀請(qǐng)進(jìn)入相關(guān)微信群。請(qǐng)勿在群內(nèi)發(fā)送廣告,否則會(huì)請(qǐng)出群,謝謝理解~


          瀏覽 47
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  精品无码国产一区二区深花 | 走光无码一区二区三区 | 香蕉视频911 | 欧美激情在线 | 国产成人a亚洲精品 |