最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python如何定義帶參數(shù)的裝飾器

 更新時(shí)間:2018年03月20日 10:05:58   作者:北門(mén)吹雪  
這篇文章主要為大家詳細(xì)介紹了python如何定義帶參數(shù)的裝飾器,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

本文實(shí)例為大家分享了python定義帶參數(shù)裝飾器的具體代碼,供大家參考,具體內(nèi)容如下

案例:

       實(shí)現(xiàn)一個(gè)裝飾器,用它來(lái)檢查被裝飾函數(shù)的參數(shù)類(lèi)型。

       需求:

    裝飾器可以通過(guò)函數(shù),指明函數(shù)參數(shù)類(lèi)型,進(jìn)行函數(shù)調(diào)用的時(shí)候,傳入?yún)?shù),檢測(cè)到不匹配時(shí),拋出異常

如何解決這個(gè)問(wèn)題?

先要獲取函數(shù)的簽名,并且獲得裝飾器中參數(shù),然后把函數(shù)簽名和裝飾器中參數(shù)對(duì)應(yīng)綁定
把調(diào)用函數(shù)時(shí)候傳入的參數(shù)和函數(shù)簽名進(jìn)行綁定
把實(shí)參和裝飾器中定義的數(shù)據(jù)進(jìn)行類(lèi)型比較,不匹配拋出異常

#!/usr/bin/python3
 
from inspect import signature
 
 
def check_type(*ty_args, **ty_kwargs):
   
  def out_wrapper(func):
    # 通過(guò)signature方法,獲取函數(shù)形參:name, age, height
    sig = signature(func)
    # 獲得裝飾器傳來(lái)的參數(shù), 函數(shù)簽名與之綁定,字典類(lèi)型
    bind_types = sig.bind_partial(*ty_args, **ty_kwargs).arguments
    print(bind_types)
     
    def wrapper(*args, **kwargs):
      # 給執(zhí)行函數(shù)中具體的實(shí)參進(jìn)行和形參進(jìn)行綁定,形成字典的形式
      func_type = sig.bind(*args, **kwargs).arguments.items()
      print(func_type)
      # 循環(huán)形參和實(shí)參字典的items()形式
      for name, obj in func_type:
        if name in bind_types:
          if not isinstance(obj, bind_types[name]):
            raise TypeError('%s must be %s' % (name, bind_types[name]))
      func(*args, **kwargs)
    return wrapper
  return out_wrapper
 
 
# 通過(guò)裝飾器實(shí)現(xiàn)對(duì)函數(shù)參數(shù)進(jìn)行類(lèi)型檢查
@check_type(str, int, float)
def func(name, age, height):
  print(name, age, height)
 
 
if __name__ == '__main__':
  func('bei_men', 18, 1.75)

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Django使用channels + websocket打造在線聊天室

    Django使用channels + websocket打造在線聊天室

    本文將教你如何使用channels + websocket打造個(gè)在線聊天室。一共只有四步,你可以輕松上手并學(xué)會(huì)。項(xiàng)目中大部分代碼是基于channels的官方文檔的,加入了些自己的理解,以便新手學(xué)習(xí)使用。
    2021-05-05
  • django將圖片上傳數(shù)據(jù)庫(kù)后在前端顯式的方法

    django將圖片上傳數(shù)據(jù)庫(kù)后在前端顯式的方法

    今天小編就為大家分享一篇django將圖片上傳數(shù)據(jù)庫(kù)后在前端顯式的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-05-05
  • PyQt5基本控件使用之消息彈出、用戶(hù)輸入、文件對(duì)話(huà)框的使用方法

    PyQt5基本控件使用之消息彈出、用戶(hù)輸入、文件對(duì)話(huà)框的使用方法

    本文主要介紹PyQt界面實(shí)現(xiàn)中常用的消息彈出對(duì)話(huà)框、提供用戶(hù)輸入的輸入框、打開(kāi)文件獲取文件/目錄路徑的文件對(duì)話(huà)框。 本文主要針對(duì)這三種控件的主要場(chǎng)景進(jìn)行介紹。感興趣的朋友跟隨小編一起看看吧
    2019-08-08
  • python機(jī)器學(xué)習(xí)庫(kù)常用匯總

    python機(jī)器學(xué)習(xí)庫(kù)常用匯總

    這篇文章主要為大家匯總了常用python機(jī)器學(xué)習(xí)庫(kù),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-11-11
  • pandas獲取groupby分組里最大值所在的行方法

    pandas獲取groupby分組里最大值所在的行方法

    下面小編就為大家分享一篇pandas獲取groupby分組里最大值所在的行方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-04-04
  • 在Pycharm中設(shè)置默認(rèn)自動(dòng)換行的方法

    在Pycharm中設(shè)置默認(rèn)自動(dòng)換行的方法

    今天小編就為大家分享一篇在Pycharm中設(shè)置默認(rèn)自動(dòng)換行的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-01-01
  • Python+?Flask實(shí)現(xiàn)Mock?Server詳情

    Python+?Flask實(shí)現(xiàn)Mock?Server詳情

    這篇文章主要介紹了Python+?Flask實(shí)現(xiàn)Mock?Server詳情,文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-09-09
  • Python處理文本換行符實(shí)例代碼

    Python處理文本換行符實(shí)例代碼

    這篇文章主要介紹了Python處理文本換行符實(shí)例代碼,分享了相關(guān)代碼示例,小編覺(jué)得還是挺不錯(cuò)的,具有一定借鑒價(jià)值,需要的朋友可以參考下
    2018-02-02
  • 如何在django中添加日志功能

    如何在django中添加日志功能

    這篇文章主要介紹了django中添加日志功能,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-02-02
  • 利用LyScript實(shí)現(xiàn)應(yīng)用層鉤子掃描器

    利用LyScript實(shí)現(xiàn)應(yīng)用層鉤子掃描器

    Capstone 是一個(gè)輕量級(jí)的多平臺(tái)、多架構(gòu)的反匯編框架。本篇文章將運(yùn)用LyScript插件結(jié)合Capstone反匯編引擎實(shí)現(xiàn)一個(gè)鉤子掃描器,感興趣的可以了解一下
    2022-08-08

最新評(píng)論

海阳市| 蚌埠市| 北川| 广德县| 永丰县| 武汉市| 芜湖市| 湾仔区| 凤台县| 铜川市| 饶平县| 寿光市| 丰都县| 章丘市| 芒康县| 东丰县| 宁陵县| 凭祥市| 白银市| 玉溪市| 和政县| 林西县| 大洼县| 襄汾县| 新建县| 芦溪县| 蒙城县| 土默特左旗| 合水县| 昌江| 都江堰市| 毕节市| 丹江口市| 定边县| 永胜县| 罗源县| 建始县| 太原市| 武宣县| 青阳县| 陆丰市|