欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

案例:

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

       需求:

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

如何解決這個問題?

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

#!/usr/bin/python3
 
from inspect import signature
 
 
def check_type(*ty_args, **ty_kwargs):
   
  def out_wrapper(func):
    # 通過signature方法,獲取函數(shù)形參:name, age, height
    sig = signature(func)
    # 獲得裝飾器傳來的參數(shù), 函數(shù)簽名與之綁定,字典類型
    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
 
 
# 通過裝飾器實(shí)現(xiàn)對函數(shù)參數(shù)進(jìn)行類型檢查
@check_type(str, int, float)
def func(name, age, height):
  print(name, age, height)
 
 
if __name__ == '__main__':
  func('bei_men', 18, 1.75)

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

相關(guān)文章

  • Python采用raw_input讀取輸入值的方法

    Python采用raw_input讀取輸入值的方法

    這篇文章主要介紹了Python采用raw_input讀取輸入值的方法,對初學(xué)者有很好的學(xué)習(xí)借鑒價(jià)值,需要的朋友可以參考下
    2014-08-08
  • python db類用法說明

    python db類用法說明

    這篇文章主要介紹了python db類用法說明,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-07-07
  • 使用python接入微信聊天機(jī)器人

    使用python接入微信聊天機(jī)器人

    這篇文章主要為大家詳細(xì)介紹了使用python接入微信聊天機(jī)器人,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-06-06
  • Python中日期和時間的互相轉(zhuǎn)換操作方法

    Python中日期和時間的互相轉(zhuǎn)換操作方法

    Python的datetime模塊提供了一套強(qiáng)大而靈活的工具,使我們能夠輕松地在不同的時間表示形式間相互轉(zhuǎn)換,并進(jìn)行復(fù)雜的時間計(jì)算,本文通過一個實(shí)用的例子向大家展示如何在Python中高效地進(jìn)行這些操作,感興趣的朋友一起看看吧
    2024-05-05
  • Python使用pydub庫對mp3與wav格式進(jìn)行互轉(zhuǎn)的方法

    Python使用pydub庫對mp3與wav格式進(jìn)行互轉(zhuǎn)的方法

    今天小編就為大家分享一篇Python使用pydub庫對mp3與wav格式進(jìn)行互轉(zhuǎn)的方法,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-01-01
  • Python實(shí)現(xiàn)視頻裁剪的示例代碼

    Python實(shí)現(xiàn)視頻裁剪的示例代碼

    這篇文章主要介紹了如何通過Python實(shí)現(xiàn)視頻裁剪,可以將視頻按照自定義尺寸進(jìn)行裁剪,文中的示例代碼簡潔易懂,感興趣的可以了解一下
    2022-01-01
  • Python從PDF中提取文本的方法效率總結(jié)

    Python從PDF中提取文本的方法效率總結(jié)

    日常工作中我們經(jīng)常會用到pdf格式的文件,大多數(shù)情況下是瀏覽或者編輯pdf信息,但有時候需要提取pdf中的文本,這篇文章主要給大家總結(jié)介紹了關(guān)于Python從PDF中提取文本的方法效率,需要的朋友可以參考下
    2023-09-09
  • pytorch打印網(wǎng)絡(luò)結(jié)構(gòu)的實(shí)例

    pytorch打印網(wǎng)絡(luò)結(jié)構(gòu)的實(shí)例

    今天小編就為大家分享一篇pytorch打印網(wǎng)絡(luò)結(jié)構(gòu)的實(shí)例,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-08-08
  • 判斷python對象是否可調(diào)用的三種方式及其區(qū)別詳解

    判斷python對象是否可調(diào)用的三種方式及其區(qū)別詳解

    今天小編就為大家分享一篇判斷python對象是否可調(diào)用的三種方式及其區(qū)別詳解,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-01-01
  • 使用python構(gòu)建WebSocket客戶端的教程詳解

    使用python構(gòu)建WebSocket客戶端的教程詳解

    WebSocket是一種在客戶端和服務(wù)器之間實(shí)現(xiàn)雙向通信的協(xié)議,常用于實(shí)時聊天、實(shí)時數(shù)據(jù)更新等場景,Python提供了許多庫來實(shí)現(xiàn) WebSocket客戶端,本教程將介紹如何使用Python構(gòu)建WebSocket客戶端,文中通過代碼示例給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2023-12-12

最新評論