久久久久久久视色,久久电影免费精品,中文亚洲欧美乱码在线观看,在线免费播放AV片

<center id="vfaef"><input id="vfaef"><table id="vfaef"></table></input></center>

    <p id="vfaef"><kbd id="vfaef"></kbd></p>

    
    
    <pre id="vfaef"><u id="vfaef"></u></pre>

      <thead id="vfaef"><input id="vfaef"></input></thead>

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

      python中的函數裝飾器解析

      一、函數裝飾器

      1、函數裝飾器的定義:

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

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

      示例1:調用新函數

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

      python中的函數裝飾器解析

      示例2:

      python中的函數裝飾器解析

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

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

      python中的函數裝飾器解析

      運行結果如下:

      python中的函數裝飾器解析

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

      python中的函數裝飾器解析

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

      導入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、 創(chuàng)建裝飾器, 要求如下:
      1). 創(chuàng)建add_log裝飾器, 被裝飾的函數打印日志信息;
      2). 日志格式為: [字符串時間] 函數名: xxx, 運行時間:xxx, 運行返回值結果:xxx

      python中的函數裝飾器解析

      運行結果為:

      python中的函數裝飾器解析

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

      python中的函數裝飾器解析

      運行結果為:

      python中的函數裝飾器解析

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

      python中的函數裝飾器解析

      運行結果為:

      python中的函數裝飾器解析

      4、多和裝飾器的應用

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

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

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

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

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

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

      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號