国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

簡單說明Python中的裝飾器的用法

2019-11-25 17:40:11
字體:
來源:轉載
供稿:網友

裝飾器對與Python新手以至于熟悉Python的人都是一個難理解, 難寫的東西. 那么今天就分享一下我對Python 裝飾器的理解

所謂裝飾器僅僅是一種語法糖, 可作用的對象可以是函數也可以是類, 裝飾器本身是一個函數, 其主要工作方式就是將被裝飾的類或者函數當作參數傳遞給裝飾器函數, 比如定義如下裝飾器

import timedef run_time(func):  def wrapper(*args, **kwargs):    start = time.time()    r = func(*args, **kwargs)    print time.time() - start    return r  return wrapper

我們用這個裝飾器裝飾一個test函數

@run_timedef test():  print "just a test"

前面說過其實裝飾器就是一個語法糖, 就是將被裝飾的函數作為參數傳遞給裝飾器函數, 所以上面可以展開為

test = run_time(test)

裝飾器將在解釋器運行一開始就被加載, 從而將被裝飾的函數將被展開成如上方式, 因為 run_time裝飾器返回wrapper函數, 所以當調用test函數時其實就是對wrapper的調用

如果你在Python shell下執行以上語句就會發現定義完test函數然后查看test時, shell所展示的是wrapper函數

201542492457922.png (502×346)

接下來說說如何編寫帶參數的裝飾器, 大家如果細心的話就可以發現其實帶參數的裝飾器是經過調用"裝飾器"函數返回的一個裝飾器, 之所以裝飾器上打引號是說明其實這個所謂的"裝飾器"只不過是一個普通的函數, 但這個普通的函數返回一個裝飾器, 可以參看下面例子:

import timedef route(url):  def decorator(func):    func.__url__ = url    return func  return decorator@route(r"/")def index():  return "Hi"

大家可以發現在使用route裝飾器時我們其實是調用了route函數, route函數返回一個decorator裝飾器, 因為我們不需要在裝飾器內運行函數, 所以不需要一個wrapper函數來收集參數.

以上就是全部內容, 希望對裝飾器一知半解的人有些許幫助

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 丁青县| 微山县| 长治县| 开封县| 商洛市| 冷水江市| 安徽省| 新津县| 泗水县| 台前县| 盐津县| 龙川县| 天峨县| 阿图什市| 任丘市| 墨竹工卡县| 万宁市| 黄梅县| 嘉兴市| 周宁县| 临西县| 祥云县| 正蓝旗| 玉山县| 巫山县| 六枝特区| 巴马| 芷江| 贡觉县| 郁南县| 双流县| 邳州市| 大丰市| 玉溪市| 瓦房店市| 福安市| 安岳县| 行唐县| 汉川市| 鄯善县| 天津市|