成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

9個不為人知的Python技巧

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

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

[[315605]]

清理字符串輸入

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

 

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

對迭代器進行切片

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

 

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

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

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

 

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

只帶有關鍵字參數(kwargs)的函數

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

 

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

創建支持with語句的對象

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

 

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

 

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

使用__slots__節省內存

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

 

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

限制CPU和內存的使用

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

 

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

控制什么可以導入,什么不可以導入

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

 

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

實現比較運算符的簡單方式

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

 

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

結論

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

責任編輯:華軒 來源: Python知識圈
相關推薦

2010-09-03 08:52:38

CSS

2010-09-06 14:19:54

CSS

2010-08-05 11:14:12

Flex優勢

2024-05-17 13:08:46

Python代碼

2011-10-19 16:19:27

iOS 5蘋果

2013-08-09 09:27:08

vCentervSphere

2010-04-19 16:09:22

Oracle控制文件

2021-01-15 09:00:00

人工智能IT數據

2017-08-16 17:00:19

2021-11-09 07:34:34

Python函數代碼

2021-11-03 16:48:55

Flex前端特性

2011-11-08 13:41:27

蘋果siri人工智能數據中心

2011-11-15 10:25:56

IBMWindows

2014-08-18 10:44:31

斯諾登

2012-11-30 14:13:01

2021-02-05 09:58:52

程序員Windows系統

2011-11-14 10:06:16

IBM大型機支持Windows系統POWER7

2017-03-28 08:40:14

2021-03-11 09:54:34

零日漏洞漏洞黑客

2023-11-09 08:05:40

IDEA開發工具
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲国产精品99久久久久久久久 | 日本一道本视频 | 91一区 | 波多野结衣一区二区 | 香蕉视频一区二区 | 日韩免费一区二区 | 91在线电影| 99在线免费视频 | 欧美一区免费在线观看 | 中文字幕一区二区三区四区五区 | www.日韩免费 | 一级免费在线视频 | 中文字幕1区2区3区 日韩在线视频免费观看 | 天天操操 | 久久久.com | 天天曰天天曰 | 久久夜色精品国产 | 日韩电影一区 | 日韩综合网 | 久草在线| 少妇精品亚洲一区二区成人 | 久久久91精品国产一区二区三区 | 国产伦精品一区二区三区精品视频 | 在线欧美小视频 | 欧美日韩大片 | 激情91| 日韩视频在线一区 | 欧美精品久久久 | 亚洲国产片 | 亚洲国产精品suv | 亚洲中午字幕 | 久草网址| 在线观看国产www | 国产真实精品久久二三区 | a级免费黄色片 | 日韩av.com| 一级中国毛片 | 精品一区二区久久 | 国产清纯白嫩初高生视频在线观看 | 精品无码久久久久久国产 | 欧美中文在线 |