<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>

          Python 類裝飾器,使用小演示

          共 1521字,需瀏覽 4分鐘

           ·

          2020-11-19 23:23

          Python與算法社區(qū)
          433篇原創(chuàng),干貨滿滿
          值得星標(biāo)


          01

          02

          03


          三步加星標(biāo)





          實現(xiàn)同樣一個功能,用Java語言可能得50行,而用Python可能只需10行,可能很多讀者在沒有學(xué)Python前,就從用過Python的前輩那里,聽說過這個,然后自己也開始去學(xué)Python的。


          Python的確簡潔、優(yōu)雅,很多讀者包括我,都為之著迷。


          今天通過一個小例子,再次認(rèn)識Python的clean之道:


          我們想要檢查每個參數(shù),確保不能出現(xiàn)整數(shù)類型。使用類裝飾器,便能做到clean,通用:


          import?functools


          class?ValidateParameters:
          ????def?__init__(self,?func):
          ????????#?確保func被裝飾后函數(shù)信息不被改變
          ????????functools.update_wrapper(self,?func)
          ????????self.func?=?func

          ????#?重寫此方法,讓類對象變得可調(diào)用
          ????def?__call__(self,?*parameters):
          ????????if?any([isinstance(item,?int)?for?item?in?parameters]):
          ????????????raise?TypeError("Parameter?shouldn't?be?int!!")
          ????????else:
          ????????????return?self.func(*parameters)

          使用上面的類,開始裝飾我們的各種函數(shù),比如連接字符串函數(shù) concat,第一次調(diào)用傳參都為字符串,類型滿足要求;第二次調(diào)用傳參有整數(shù)類型,拋出異常:Parameter shouldn't be int!!

          @ValidateParameters
          def?concat(*list_string):
          ????return?"".join(list_string)


          #??returns?anb
          print(concat("a",?"n",?"b"))

          #?raises?Error.
          print(concat("a",?1,?"c"))

          任意一個想要有類型檢查的函數(shù),都可以裝飾上ValidateParemeters,如下capital函數(shù),實現(xiàn)串聯(lián)字符串后,且首字母大寫:

          @ValidateParameters
          def?capital(*list_string):
          ????return?concat(*list_string).capitalize()


          print(capital("a",?"n",?"b"))

          print(capital(2,?"n",?"b"))

          如果輸入?yún)?shù)有整型,必然拋出上面的異常,再次方便的實現(xiàn)類型檢查。

          以上使用Python類裝飾器,實現(xiàn)代碼clean的一個小演示。

          常用的如Pandas、TensorFlow、Keras等框架,里面的源碼,都能看到類似用法,這類語法讓Python真正做到clean.

          要想掌握Python,需要由表及里,不斷深入理解。今年,我大概花費4個多月時間,整理了20個Python核心專題,非常適合入門的讀者,下面列舉幾個章節(jié)的目錄:





          掌握理解這20個專題后,再去看看幾本有深度的Python教程,相信那時你就是專家。

          以上這20個專題PDF,還有需要的微信我,備注 專題:

          不必打賞
          給我點個贊
          就心滿意足了
          瀏覽 73
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <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>
                  一级特黄60分钟免费看 | 操逼视频黄片中国版的中国的 | 尻屄网站 | 爱爱视图 | 操伊人久久 |