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

分享

獨家 | 9個可以顯著優(yōu)化代碼的Python內(nèi)置裝飾器

 黃爸爸好 2023-01-25 發(fā)布于福建
圖片
作者:Yang Zhou

翻譯:陳之炎

校對:趙茹萱


本文約2000字,建議閱讀8分鐘
本文介紹了精心挑選的9個函數(shù)裝飾器,,它將展示Python的優(yōu)雅,。

函數(shù)裝飾器有事半功倍的力量。

圖片

Wallhaven 提供 圖片

“簡勝于繁,?!?/span>

Python函數(shù)裝飾器是“Python zen”哲學(xué)的最佳特性。

裝飾器助力用更少,、更簡單的代碼來實現(xiàn)復(fù)雜的邏輯,,并在其他地方實現(xiàn)重用。

有許多很棒的內(nèi)置Python裝飾器使編碼變得更為容易,,只使用一行代碼便可向當(dāng)前的函數(shù)或類中添加復(fù)雜的函數(shù),。

行勝于言,接下來,,來看看精心挑選的9個函數(shù)裝飾器,,它將展示Python的優(yōu)雅。

1. @lru_cache:利用緩存提速程序

使用@lru_cache裝飾器是提速Python函數(shù)最簡易的方法,。

此裝飾器將函數(shù)的結(jié)果放入緩存,,供后續(xù)具有相同參數(shù)的函數(shù)調(diào)用,無需再次執(zhí)行具有相同參數(shù)的函數(shù),。

對于那些算力成本高昂或常用相同參數(shù)函數(shù)的調(diào)用特別有用,。

來看看以下直觀的示例:

圖片


上述程序用Python函數(shù)計算第n個Fibonacci數(shù),這個函數(shù)非常耗時,,當(dāng)計算fibonacci(30)時,,在遞歸過程中需要多次計算先前的Fibonacci數(shù)。

用@lru_cache裝飾器來對它進(jìn)行提速:

圖片


正如上述代碼所示,,使用@lru_cache裝飾器后,,可以在0.00002990秒內(nèi)得到相同的結(jié)果,,比先前的0.18129450秒快了不少。

@lru_cache裝飾器有一個“最多結(jié)果數(shù)目”參數(shù),,該參數(shù)指定要在緩存中存儲的最大結(jié)果數(shù)目,。當(dāng)緩存已滿且需要存儲新結(jié)果時,會將最近使用得最少的結(jié)果從緩存中刪除,,為新緩存騰出空間,,稱之為最近最不常用策略(LRU)。

默認(rèn)情況下,,將“最多結(jié)果數(shù)目”設(shè)為128,。如果設(shè)為None,則禁用 LRU特性,,緩存可以無約束地增長,。

2. @total_ordering: 填充缺失排序方法的類裝飾器

函數(shù)工具模塊中的@total_sordeng裝飾器為預(yù)定義Python類生成缺失比較方法。

下面為示例程序:

圖片


如上述代碼所示,,在學(xué)生類中沒有對__ge__,、__gt__和__le__方法進(jìn)行定義,多虧有了@total_order裝飾器,,不同實例之間的比較結(jié)果均正確,。

該裝飾器的好處顯而易見:

  • 可以使代碼更干凈,節(jié)省時間,,因為無需編寫全部比較方法,。
  • 一些舊的類可能未充分定義比較方法,將@total_ordering裝飾器添加到其中之后,,后續(xù)的使用更加安全,。

3. @contextmanager:定制的語境管理器

Python有一個語境管理器機(jī)制助力正確地管理資源。

大多數(shù)情況下,,只需要使用with聲明:

圖片


如上述代碼所示,,可以使用with語句打開文件,在寫入之后將自動關(guān)閉,。無需顯式地調(diào)用f.close()函數(shù)來關(guān)閉該文件,。

有時,,需要為某些特定需求定義一個自定義的語境管理器,,此時,@contextmanager裝飾器便成為了我們的朋友,。

例如,,下述代碼實現(xiàn)了一個簡單的自定義語境管理器,它可以在文件打開或關(guān)閉時打印出相應(yīng)的信息,。

圖片

4. @property: 為Python類設(shè)置處理程序和設(shè)置程序

Getters和Setters是面向?qū)ο缶幊蹋∣OP)中的重要概念,。

對于類中的每個實例變量,,getter方法返回其值,而setter方法設(shè)置或更新其值,。鑒于此,,Getters和Setters又分別稱為Accessors和Mutators。

它們用于保護(hù)數(shù)據(jù)不會直接意外訪問或修改,。

不同的OOP語言有不同的機(jī)制來定義獲取器getters和setters,。在Python中,可以簡單地使用@property裝飾器,。

圖片


如上述示例所示,,無法將分?jǐn)?shù)變量設(shè)置為999,這是一個毫無意義的數(shù)字,。因為@property裝飾器的設(shè)置函數(shù)中限制了分?jǐn)?shù)的可接受范圍,。

毫無疑問,添加這個setter可以成功地避免意外的錯誤和結(jié)果,。

5. @cached_property:將方法的結(jié)果作為屬性放入緩存

Python 3.8的函數(shù)工具模塊引入了一個新的功能強(qiáng)大的裝飾器-@cached_property,,它將類的方法轉(zhuǎn)換為一個屬性,計算出該屬性的值之后,,將其作為實例的普通屬性放入緩存,。

下面是這個示例:

圖片


在上述代碼中,利用@cached_property來裝飾局部方法,,無需重復(fù)計算circle.area示例,。

6. @classmethod:定義新的Python類方法

Python類中有三種方法類型:

  • Instance methods(實例方法):綁定一個實例的方法,利用這種方法可以訪問和修改實例數(shù)據(jù),。通過類的實例調(diào)用實例方法,,通過self參數(shù)訪問實例數(shù)據(jù)。
  • Class methods(類方法):綁定一個類的方法,,無法利用該方法修改實例數(shù)據(jù),。是調(diào)用類自身的一種方法,它將類作為第一個參數(shù),,通常將其命名為cls,。
  • Static methods(靜態(tài)方法):不綁定實例或類的方法。

可以將實例方法定義成普通的Python函數(shù),,它的第一個參數(shù)是自身,;如果需要定義一個類方法,則需要使用@classmethod裝飾器,。

為了演示,,下面的示例定義了一個類方法,可以用它來根據(jù)直徑獲得一個圓:

圖片

7. @staticmethod:為Python類定義靜態(tài)方法

如前所述,,靜態(tài)方法不綁定到實例或類,,僅僅因為它們在邏輯上屬于那個類,,才被包含進(jìn)來。

靜態(tài)方法通常用于執(zhí)行一組相關(guān)任務(wù)的實用程序類中,,如數(shù)學(xué)計算,。通過將相關(guān)函數(shù)組織成類的靜態(tài)方法,使代碼變得更加有組織,、更容易理解,。

使用@staticmethod裝飾器便可以定義一個靜態(tài)方法,來看看下面這個例子:

圖片


8. @dataclass:用更少的代碼定義專用類

@dataclass裝飾器(在Python3.7中引入)可以自動為一個類生成幾種專用的方法,,如__init__,、__repr__、__eq__,、__lt__等,。

因此,它可以節(jié)省大量編寫這些基本方法的時間,。如果一個類主要用于存儲數(shù)據(jù),,那么@dataccass裝飾器是最好的朋友。

為了進(jìn)行演示,,下面的示例只定義了一個名為Point類的兩個數(shù)據(jù)字段,,@dataclass裝飾器就夠用了:

圖片


9. @atexit.register:注冊一個程序正常終止的函數(shù)

atexit模塊的@register裝飾器允許在Python解釋器退出時執(zhí)行一個函數(shù)。

該裝飾器對于執(zhí)行最終的任務(wù)非常有用,,比如釋放資源或說“再會”,!??

下面是這個示例:

圖片

輸出如下:

圖片


如示例所示,由于使用了@register裝飾器,,即使沒有明確地調(diào)用“再會”函數(shù),,終端也打印出了“再會!”,。

感謝拔冗閱讀,。??

原文標(biāo)題:9 Python Built-In Decorators That Optimize Your Code Significantly

原文鏈接:https:///techtofreedom/9-python-built-in-decorators-that-optimize-your-code-significantly-bc3f661e9017

編輯:黃繼彥
校對:林亦霖




譯者簡介





圖片

陳之炎,北京交通大學(xué)通信與控制工程專業(yè)畢業(yè),,獲得工學(xué)碩士學(xué)位,,歷任長城計算機(jī)軟件與系統(tǒng)公司工程師,大唐微電子公司工程師,,現(xiàn)任北京吾譯超群科技有限公司技術(shù)支持,。目前從事智能化翻譯教學(xué)系統(tǒng)的運營和維護(hù),在人工智能深度學(xué)習(xí)和自然語言處理(NLP)方面積累有一定的經(jīng)驗,。業(yè)余時間喜愛翻譯創(chuàng)作,,翻譯作品主要有:IEC-ISO 7816、伊拉克石油工程項目,、新財稅主義宣言等等,,其中中譯英作品“新財稅主義宣言”在GLOBAL TIMES正式發(fā)表。能夠利用業(yè)余時間加入到THU 數(shù)據(jù)派平臺的翻譯志愿者小組,,希望能和大家一起交流分享,,共同進(jìn)步

翻譯組招募信息

工作內(nèi)容:需要一顆細(xì)致的心,將選取好的外文文章翻譯成流暢的中文,。如果你是數(shù)據(jù)科學(xué)/統(tǒng)計學(xué)/計算機(jī)類的留學(xué)生,,或在海外從事相關(guān)工作,或?qū)ψ约和庹Z水平有信心的朋友歡迎加入翻譯小組,。

你能得到:定期的翻譯培訓(xùn)提高志愿者的翻譯水平,,提高對于數(shù)據(jù)科學(xué)前沿的認(rèn)知,海外的朋友可以和國內(nèi)技術(shù)應(yīng)用發(fā)展保持聯(lián)系,,THU數(shù)據(jù)派產(chǎn)學(xué)研的背景為志愿者帶來好的發(fā)展機(jī)遇,。

其他福利:來自于名企的數(shù)據(jù)科學(xué)工作者,北大清華以及海外等名校學(xué)生他們都將成為你在翻譯小組的伙伴,。

    本站是提供個人知識管理的網(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ā)表

    請遵守用戶 評論公約

    類似文章 更多