函數進階(二)

疊加裝飾器

疊加裝飾器:在同一個被裝飾對象中,添加多個裝飾器,並執行(裝飾器在被裝飾對象被調用時,纔會執行添加的功能)閉包

疊加裝飾器:app

​ 裝飾順序:由下而上,調用wrapper裝飾器拿到返回值inner函數

​ 執行順序:由上而下,調用裝飾事後的返回值innercode

ps:不管inner中出現任何判斷,最後都要返回‘調用後的被裝飾對象’func(*args,**kwargs)對象

有參裝飾器

有參也可叫作三層閉包,裝飾器後面加上括號傳入參數(能夠用做用戶權限區分)索引

無參裝飾器

裝飾在被裝飾對象時,沒有傳入參數的裝飾器內存

wraps

做用:修復的是被裝飾對象的空間it

from functools import wraps
def wrapper(func):
    @wraps(func)  # 修更名稱空間: inner ---》 func
    def inner(*args, **kwargs):
        '''
        此處是裝飾器的註釋
        :param func:
        :return:
        '''
        res = func(*args, **kwargs)
        return res
    return inner  # ---》 func
@wrapper
def index():
    '''
    此處是index函數的註釋
    :return:
    '''
    pass
# print(index)  # 函數對象
#
# # 函數對象.__doc__: 查看函數內部的註釋
index()
print(index.__doc__)  # inner.__doc__

迭代器

原理:內置--iter--都是可迭代對象,加上next取值就是迭代器,迭代器不依賴索引取值,每次只取一個值而且停頓,內存裏面只存一個值,若是想要獲取前面的值,只能重新執行iter;class

優勢:不依賴索引取值,佔用內存小

缺點:一次只取一個值,要想調用前面的值,只能重新建立迭代對象或者重新調用iter,當兩個循環同時使用一個迭代器時,只有一個能執行成功

相關文章
相關標籤/搜索