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

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中的eventlet通信機制

    一文帶你探索Python中的eventlet通信機制

    這篇文章主要為大家詳細介紹了Python中的eventlet通信機制的相關(guān)知識,文中的示例代碼講解詳細,對我們深入了解Python有一定幫助,需要的可以參考一下
    2023-06-06
  • 基于python做一個2048小游戲

    基于python做一個2048小游戲

    2048的邏輯無非是操作4*4的方格,每個方格中有一個數(shù),這些數(shù)可以移動,如果兩個相同的數(shù)字在移動時相撞了,就可以彼此合并,本文將給大家介紹如何基于python做一個2048小游戲,感興趣的小伙伴跟著小編一起來看看吧
    2024-01-01
  • Python實現(xiàn)DBSCAN聚類算法并樣例測試

    Python實現(xiàn)DBSCAN聚類算法并樣例測試

    聚類是一種機器學習技術(shù),它涉及到數(shù)據(jù)點的分組,聚類是一種無監(jiān)督學習的方法,是許多領(lǐng)域中常用的統(tǒng)計數(shù)據(jù)分析技術(shù)。本文給大家分享Python實現(xiàn)DBSCAN聚類算法并樣例測試,感興趣的朋友一起看看吧
    2021-06-06
  • Python數(shù)據(jù)處理的三個實用技巧分享

    Python數(shù)據(jù)處理的三個實用技巧分享

    數(shù)據(jù)處理無所不在,掌握常用技巧,事半功倍。這篇文章將使用Pandas開展數(shù)據(jù)處理分析,總結(jié)其中常用、好用的數(shù)據(jù)分析技巧,感興趣的可以學習一下
    2022-04-04
  • Python中多線程thread與threading的實現(xiàn)方法

    Python中多線程thread與threading的實現(xiàn)方法

    這篇文章主要介紹了Python中多線程thread與threading的實現(xiàn)方法,很重要的應(yīng)用,需要的朋友可以參考下
    2014-08-08
  • python模擬登陸、POST/GET請求方式

    python模擬登陸、POST/GET請求方式

    這篇文章主要介紹了python模擬登陸、POST/GET請求方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-02-02
  • pycharm遠程連接服務(wù)器運行pytorch的過程詳解

    pycharm遠程連接服務(wù)器運行pytorch的過程詳解

    這篇文章主要介紹了在Linux環(huán)境下使用Anaconda管理不同版本的Python環(huán)境,并通過PyCharm遠程連接服務(wù)器來運行PyTorch的過程,包括安裝PyTorch、CUDA以及配置PyCharm遠程開發(fā)環(huán)境的詳細步驟,需要的朋友可以參考下
    2025-02-02
  • 總結(jié)python爬蟲抓站的實用技巧

    總結(jié)python爬蟲抓站的實用技巧

    很多人學用python,用得最多的還是各類爬蟲腳本:有寫過抓代理本機驗證的腳本,有寫過自動收郵件的腳本,還有寫過簡單的驗證碼識別的腳本,那么我們今天就來總結(jié)下python爬蟲抓站的一些實用技巧。
    2016-08-08
  • Python中實現(xiàn)定時任務(wù)常見的幾種方式

    Python中實現(xiàn)定時任務(wù)常見的幾種方式

    在Python中,實現(xiàn)定時任務(wù)是一個常見的需求,無論是在自動化腳本、數(shù)據(jù)處理、系統(tǒng)監(jiān)控還是其他許多應(yīng)用場景中,Python提供了多種方法來實現(xiàn)定時任務(wù),包括使用標準庫、第三方庫以及系統(tǒng)級別的工具,本文將詳細介紹幾種常見的Python定時任務(wù)實現(xiàn)方式
    2024-08-08
  • python中使用requests設(shè)置代理服務(wù)器

    python中使用requests設(shè)置代理服務(wù)器

    文章介紹了代理服務(wù)器的工作原理和使用方法,包括代理的概念、代理服務(wù)器的作用、如何在Python中設(shè)置代理以及代理的匿名度分類
    2024-11-11

最新評論

龙泉市| 边坝县| 银川市| 安化县| 宁南县| 水城县| 东方市| 洛隆县| 神农架林区| 寿光市| 卢湾区| 凌源市| 新巴尔虎左旗| 石台县| 收藏| 甘谷县| 宁远县| 霍林郭勒市| 中阳县| 稻城县| 雷山县| 依安县| 文山县| 抚远县| 大关县| 苍南县| 东兰县| 西峡县| 乌兰县| 瓮安县| 伊春市| 兴安县| 南康市| 凤翔县| 准格尔旗| 连平县| 饶河县| 金川县| 新闻| 曲水县| 军事|