day11 裝飾器

什麼是裝飾器python

開放封閉原則閉包

軟件一旦上線後,就應該遵循開放封閉原則。對修改源代碼是粉筆的,對功能的拓展是開放的也就是說咱們必須找到一種解決方案:可以在不修改一個功能源代碼以及調用方式的前提下,爲其加上新功能app

總結函數

原則以下對象

1.不修改源代碼blog

2.不修改調用方式內存

目的class

在1和2元則的基礎上拓展新功能import

什麼是裝飾器基礎

裝飾器即在不修改被裝飾對象源代碼與調用方式的前提下,爲裝飾器對象添加新功能

裝飾器與被裝飾的對象都可以是任意調用的對象

裝飾器=>函數

被裝飾的對象=>函數

 

語法糖

被裝飾函數的正上方,單獨一行
        @deco1
        def foo():
            pass
        foo=deco1()
並且語法糖的前後順序也會影響代碼執行結果

# import time  引入time庫#定義了一個閉包函數(最高嵌套3層)
# def timer(func):#   函數內部包含一個函數,且引用函數內部的變量即閉包函數,閉包函數從自身所在名稱空間出發尋找變量,找不到就跳出本層找,直到找到內置名稱空間
#     def wrapper(*args,**kwargs):#          *args和**kwargs保證了能接收任何參數#     代碼塊
#         start_time = time.time()
#         res=func(*args,**kwargs)  #調用最原始的index#           上面接收什麼,這裏就會接收什麼
#         stop_time = time.time()
#         print('run time %s' % (stop_time - start_time))
#         return res #這個是幹嗎的,只知道是返回最原始的index
#     return wrapper #返回的是wrapper函數名對應的內存地址,能夠加()直接調用
#
# @timer   #語法糖,至關於index=timer(index)
# def index():
#     time.sleep(一、
#     print('welcome to index page')
#     return 123
# @timer
# def home(name):
#     time.sleep(2)
#     print('welcome %s to index page' %name)
#
# index()
# home('egon')
相關文章
相關標籤/搜索