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

Python使用修飾器執(zhí)行函數(shù)的參數(shù)檢查功能示例

 更新時間:2017年09月26日 10:57:50   作者:Inside_Zhang  
這篇文章主要介紹了Python使用修飾器執(zhí)行函數(shù)的參數(shù)檢查功能,結(jié)合具體實例形式分析了Python實現(xiàn)修飾器針對函數(shù)參數(shù)檢查的原理、步驟與相關(guān)操作技巧,需要的朋友可以參考下

本文實例講述了Python使用修飾器執(zhí)行函數(shù)的參數(shù)檢查功能。分享給大家供大家參考,具體如下:

參數(shù)檢查:1. 參數(shù)的個數(shù);2. 參數(shù)的類型;3. 返回值的類型。

考慮如下的函數(shù):

import html
def make_tagged(text, tag):
  return '<{0}>{1}</{0}>'.format(tag, html.escape(text))

顯然我們希望傳遞進來兩個參數(shù),且參數(shù)類型/返回值類型均為str,再考慮如下的函數(shù):

def repeat(what, count, separator) :
  return ((what + separator)*count)[:-len(separator)]

顯然我們希望傳遞進來三個參數(shù),分別為str,int,str類型,可對返回值不做要求。

那么我們該如何實現(xiàn)對上述參數(shù)要求,進行參數(shù)檢查呢?

import functools
def statically_typed(*types, return_type=None):
  def decorator(func):
    @functools.wraps(func)
    def wrapper(*args, **kwargs):
      if len(args) > len(types):
        raise ValueError('too many arguments')
      elif len(args) < len(types):
        raise ValueError('too few arguments')
      for i, (type_, arg) in enumerate(zip(types, args)):
        if not isinstance(type_, arg):
          raise ValueError('argument {} must be of type {}'.format(i, type_.__name__))
      result = func(*args, **kwargs)
      if return_type is not None and not isinstance(result, return_type):
        raise ValueError('return value must be of type {}'.format(return_type.__name__))
      return wrapper
    return decorator

這樣,我們便可以使用修飾器模板執(zhí)行參數(shù)檢查了:

@statically_typed(str, str, return_type=str)
def make_tagged(text, tag):
  return '<{0}>{1}</{0}>'.format(tag, html.escape(text))
@statically_typed(str, int, str)
def repeat(what, count, separator):
  return ((what + separator)*count)[:-len(separator)]

注:從靜態(tài)類型語言(C/C++、Java)轉(zhuǎn)入 Python 的開發(fā)者可能比較喜歡用修飾器對函數(shù)的參數(shù)及返回值執(zhí)行靜態(tài)類型檢查,但這樣做會增加 Python 程序在運行期的開銷,而編譯型語言則沒有這種運行期開銷(Python 是解釋型語言)。

更多關(guān)于Python相關(guān)內(nèi)容可查看本站專題:《Python函數(shù)使用技巧總結(jié)》、《Python數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Python字符串操作技巧匯總》、《Python入門與進階經(jīng)典教程》及《Python文件與目錄操作技巧匯總

希望本文所述對大家Python程序設(shè)計有所幫助。

相關(guān)文章

  • python代碼區(qū)分大小寫嗎

    python代碼區(qū)分大小寫嗎

    在本篇文章里小編給大家整理了一篇關(guān)于python是否區(qū)分大小寫的相關(guān)內(nèi)容,對此有疑惑的新手們來學(xué)習(xí)下吧。
    2020-06-06
  • Python Web開發(fā)模板引擎優(yōu)缺點總結(jié)

    Python Web開發(fā)模板引擎優(yōu)缺點總結(jié)

    這篇文章主要介紹了Python Web開發(fā)模板引擎優(yōu)缺點總結(jié),需要的朋友可以參考下
    2014-05-05
  • Python日志器使用方法及原理解析

    Python日志器使用方法及原理解析

    這篇文章主要介紹了Python日志器使用方法及原理解析,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-09-09
  • 利用Python編寫一個簡單的緩存系統(tǒng)

    利用Python編寫一個簡單的緩存系統(tǒng)

    今天來做一個最簡單的例子,利用寫一個最簡單的緩存系統(tǒng),以key``value的方式保持數(shù)據(jù),并且需要將內(nèi)容中的數(shù)據(jù)落地到文件,以便下次啟動的時候,將文件的內(nèi)容加載進內(nèi)存中來,感興趣的可以了解一下
    2023-04-04
  • python實現(xiàn)json文件的增刪改操作方法

    python實現(xiàn)json文件的增刪改操作方法

    這篇文章主要介紹了python實現(xiàn)json文件的增刪改操作,本文通過示例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-06-06
  • Python實現(xiàn)藍線挑戰(zhàn)特效的示例代碼

    Python實現(xiàn)藍線挑戰(zhàn)特效的示例代碼

    在抖音曾經(jīng)火了一陣子的藍線挑戰(zhàn)特效,其原理很簡單。本文將試著用opencv-python實現(xiàn)這個效果,做了攝像頭版本和視頻處理版本,感興趣的可以學(xué)習(xí)一下
    2022-10-10
  • python實現(xiàn)socket客戶端和服務(wù)端簡單示例

    python實現(xiàn)socket客戶端和服務(wù)端簡單示例

    這篇文章主要介紹了python實現(xiàn)socket客戶端和服務(wù)端簡單示例,需要的朋友可以參考下
    2014-02-02
  • 使用Python實現(xiàn)簡單的爬蟲框架

    使用Python實現(xiàn)簡單的爬蟲框架

    爬蟲是一種自動獲取網(wǎng)頁內(nèi)容的程序,它可以幫助我們從網(wǎng)絡(luò)上快速收集大量信息。下面我們將學(xué)習(xí)如何使用 Python 編寫一個簡單的爬蟲框架,感興趣的可以了解一下
    2023-05-05
  • Python手動或自動協(xié)程操作方法解析

    Python手動或自動協(xié)程操作方法解析

    這篇文章主要介紹了Python手動或自動協(xié)程操作方法解析,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-06-06
  • python?pandas如何使用loc和iloc讀取行數(shù)據(jù)或列數(shù)據(jù)

    python?pandas如何使用loc和iloc讀取行數(shù)據(jù)或列數(shù)據(jù)

    這篇文章主要給大家介紹了關(guān)于python?pandas如何使用loc和iloc讀取行數(shù)據(jù)或列數(shù)據(jù)的相關(guān)資料,在學(xué)習(xí)機器學(xué)習(xí)的過程中對數(shù)據(jù)進行預(yù)處理時避免不了需要使用Pandas進行大量操,需要的朋友可以參考下
    2023-10-10

最新評論