站長資訊網
        最全最豐富的資訊網站

        python中的函數裝飾器解析

        一、函數裝飾器

        1、函數裝飾器的定義:

        裝飾器的實現是函數里面嵌套函數
        在不改變原函數的基礎上,給函數增加功能",把一個函數當作參數,返回一個替代版的函數
        本質上:返回函數的函數

        裝飾器需要傳遞一個函數, 返回值也是一個函數對象.

        示例1:調用新函數

        如下outer函數就是一個裝飾器,func是形參接收的一個函數,inner是返回的函數

        python中的函數裝飾器解析

        示例2:

        python中的函數裝飾器解析

        2、語法糖:@+裝飾器函數名(@desc)

        使用裝飾器來裝飾一個函數,只需要在開頭加上@+裝飾器函數名就可以

        python中的函數裝飾器解析

        運行結果如下:

        python中的函數裝飾器解析

        3、導入string模塊,使得我們可以調用與字符串操作相關的函數

        python中的函數裝飾器解析

        4、裝飾器需求:獲取每個函數的執行時間
        1.函數執行之前計算時間
        2.函數執行之后計算時間

        導入random模塊和string模塊,來生成100個大寫或小寫字母為元素組成的列表

        python中的函數裝飾器解析

        運行結果如下:

        python中的函數裝飾器解析

        問題1:被裝飾的函數有返回值的時候怎么辦?

        python函數返回值return,函數中一定要有return才是完整的函數

        #接收被裝飾函數的返回值
        res = fun(*args,**kwargs)
        return res

        python中的函數裝飾器解析

        運行結果為:

        python中的函數裝飾器解析

        問題2:如何保留被裝飾函數的函數名和幫助文檔信息

        導入import functools模塊來保留被裝飾函數的函數名和幫助文檔信息

        python中的函數裝飾器解析

        運行結果如下:

        python中的函數裝飾器解析

        .__name__:用來記錄函數的名稱

        .__doc__:用來記錄函數的文檔字符串

        5、map和匿名函數

        map( )傳入的第一個參數是一個函數,第二個參數是一個序列

        python中的函數裝飾器解析

        5、多個裝飾器的順序

        一個函數的裝飾器可以有對個,如果要使用多個裝飾器,在函數的定義之前加上對應裝飾器的語法糖就可以

        多個裝飾器的使用順序:當有多個裝飾器時,從下到上調用裝飾器

        python中的函數裝飾器解析

        運行結果為:

        python中的函數裝飾器解析

        6、帶有參數的裝飾器

        @log('westos')
        log('westos') –> 返回值是add_log
        add = add_log(add)

        python中的函數裝飾器解析

        運行結果為:

        python中的函數裝飾器解析

        二、裝飾器練習

        1、 創建裝飾器, 要求如下:
        1). 創建add_log裝飾器, 被裝飾的函數打印日志信息;
        2). 日志格式為: [字符串時間] 函數名: xxx, 運行時間:xxx, 運行返回值結果:xxx

        python中的函數裝飾器解析

        運行結果為:

        python中的函數裝飾器解析

        2、需求:用戶登陸驗證的裝飾器 is_login
        1)如果用戶登陸成功,則執行被裝飾的函數
        2)如果用戶登陸不成功,則執行登陸函數

        python中的函數裝飾器解析

        運行結果為:

        python中的函數裝飾器解析

        3、編寫裝飾器required_ints, 條件如下:
        1)確保函數接收到的每一個參數都是整數;
        2) 如果參數不是整形數, 打印 TypeError:參數必須為整形

        python中的函數裝飾器解析

        運行結果為:

        python中的函數裝飾器解析

        4、多和裝飾器的應用

        在我們實際的應用場景中,會采用多個裝飾器先驗證是否登陸成功再驗證權限

        需求1:用戶登陸驗證的裝飾器is_login

        1)如果用戶登陸成功,則執行被裝飾的函數

        2)如果用戶登陸不成功,則顯示未登陸信息

        需求2:判斷登陸用戶是否是超級用戶is_root

        1)若是超級用戶root,則執行裝飾函數

        2)若不是超級用戶,則報錯

        python中的函數裝飾器解析

        運行結果為:

        python中的函數裝飾器解析

        5、帶有參數的裝飾器練習

        編寫裝飾器required_types, 條件如下:
        1)當裝飾器為@required_types(int,float)確保函數接收到的每一個參數都是int或者float類型;
        2)當裝飾器為@required_types(list)確保函數接收到的每一個參數都是list類型;
        3)當裝飾器為@required_types(str,int)確保函數接收到的每一個參數都是str或者int類型;
        4)如果參數不滿足條件, 打印 TypeError:參數必須為xxxx類型

        python中的函數裝飾器解析

        運行結果為:

        python中的函數裝飾器解析

        python中的函數裝飾器解析

        贊(0)
        分享到: 更多 (0)
        網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
        主站蜘蛛池模板: 亚洲精品二区国产综合野狼 | 精品久久久久久久久久久久久久久| 日韩精品欧美| 国产精品成人在线| 色欲精品国产一区二区三区AV| 精品国产一区二区三区AV性色| 国产福利91精品一区二区| 一本一本久久aa综合精品| 精品国产日韩亚洲一区| 欧美高清在线精品一区| 99香蕉国产精品偷在线观看| 在线观看91精品国产网站| 精品91自产拍在线观看| 久久这里只精品国产99热| 2020久久精品国产免费| 久久精品国产第一区二区三区| 亚洲中文字幕久久精品无码APP| 免费人欧美日韩在线精品| 精品视频久久久久| 国产一级精品高清一级毛片| 亚洲日本精品一区二区| 久久精品成人免费网站| 99国产精品一区二区| 精品一区二区三区自拍图片区| 亚洲av无码国产精品色午夜字幕 | 日韩人妻无码精品久久久不卡| 久久精品国产只有精品66 | 国产在AJ精品| 国产A√精品区二区三区四区| 69堂午夜精品视频在线| 久久精品国产亚洲网站| 国产精品亚洲片在线va| 精品一区二区三区四区| 精品视频第一页| 国产精品免费网站| 九九精品在线观看| 欧美亚洲国产成人精品| 在线精品视频播放| 国产精品 羞羞答答在线| 国产成人精品福利网站在线观看| 国产成人亚洲精品91专区手机|