日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python 14 装饰器

發(fā)布時間:2025/3/20 python 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python 14 装饰器 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
  • 今日內容大綱

  • 90。自我。
  • 調整自己,適當聽取一些其他人的意見。
  • 承受壓力的能力一定要有所提高。
  • 昨天內容回顧以及作業(yè)講解

  • 匿名函數(shù):一句話函數(shù)。 多于內置函數(shù),列表推導式結合。

  • 內置函數(shù): *** 加key的。min,max,sorted,map,reduce,filter

  • 閉包:

  • 內層函數(shù)對外層函數(shù)非全局變量的使用。
  • 一定要存在嵌套函數(shù)中。
  • 作用:保證數(shù)據(jù)安全。自由變量不會再內存中消失,而且全局還引用不到。
  • 今日內容

  • 開放封閉原則:

    裝飾器:裝飾,裝修,房子就可以住,如果裝修,不影響你住,而且體驗更加,讓你生活中增加了很多功能:洗澡,看電視,沙發(fā)。 器:工具。 開放封閉原則: 開放:對代碼的拓展開放的, 更新地圖,加新槍,等等。 封閉:對源碼的修改是封閉的。閃躲用q。就是一個功能,一個函數(shù)。 別人赤手空拳打你,用機槍掃你,扔雷.....這個功能不會改變。裝飾器:完全遵循開放封閉原則。 裝飾器: 在不改變原函數(shù)的代碼以及調用方式的前提下,為其增加新的功能。 裝飾器就是一個函數(shù)。
  • 裝飾器的初識:

    • 版本一: 大壯 寫一些代碼測試一下index函數(shù)的執(zhí)行效率。
    import time # def index(): # '''有很多代碼.....''' # time.sleep(2) # 模擬的網(wǎng)絡延遲或者代碼效率 # print('歡迎登錄博客園首頁') # # def dariy(): # '''有很多代碼.....''' # time.sleep(3) # 模擬的網(wǎng)絡延遲或者代碼效率 # print('歡迎登錄日記頁面')# print(time.time()) # 格林威治時間。 # print(111) # time.sleep(3) # print(222) # 版本一有問題: 如果測試別人的代碼,必須重新賦值粘貼。 # start_time = time.time() # index() # end_time = time.time() # print(end_time-start_time) # # start_time = time.time() # dariy() # end_time = time.time() # print(end_time-start_time) # # # start_time = time.time() # # dariy() # end_time = time.time() # print(end_time-start_time)
    • 版本二:利用函數(shù),解決代碼重復使用的問題

      import time def index():'''有很多代碼.....'''time.sleep(2) # 模擬的網(wǎng)絡延遲或者代碼效率print('歡迎登錄博客園首頁') # index() def dariy():'''有很多代碼.....'''time.sleep(3) # 模擬的網(wǎng)絡延遲或者代碼效率print('歡迎登錄日記頁面')def timmer(f): # f= indexstart_time = time.time()f() # index()end_time = time.time()print(f'測試本函數(shù)的執(zhí)行效率{end_time-start_time}') timmer(index)版本二還是有問題: 原來index函數(shù)源碼沒有變化,給原函數(shù)添加了一個新的功能測試原函數(shù)的執(zhí)行效率的功能。 滿足開放封閉原則么?原函數(shù)的調用方式改變了。
    • 版本三:不能改變原函數(shù)的調用方式。

      # import time # def index(): # '''有很多代碼.....''' # time.sleep(2) # 模擬的網(wǎng)絡延遲或者代碼效率 # print('歡迎登錄博客園首頁') # # def timmer(f): # f = index (funciton index123) # def inner(): # inner :(funciton inner123) # start_time = time.time() # f() # index() (funciton index123) # end_time = time.time() # print(f'測試本函數(shù)的執(zhí)行效率{end_time-start_time}') # return inner # (funciton inner123) # timmer(index) # index() # ret = timmer(index) # inner # ret() # inner() # index = timmer(index) # inner (funciton inner123) # index() # inner() # def func(): # print('in func') # # def func1(): # print('in func1') # # # func() # # func1() # func() # func = 666 # func(0)
    • 版本四:具體研究

      import time def index():'''有很多代碼.....'''time.sleep(2) # 模擬的網(wǎng)絡延遲或者代碼效率print('歡迎登錄博客園首頁')def timmer(f):f = index# f = <function index at 0x0000023BA3E8A268>def inner():start_time = time.time()f()end_time = time.time()print(f'測試本函數(shù)的執(zhí)行效率{end_time-start_time}')return innerindex = timmer(index) index()
    • 版本五:python做了一個優(yōu)化;提出了一個語法糖的概念。 標準版的裝飾器

      import time # timmer裝飾器 def timmer(f):def inner():start_time = time.time()f()end_time = time.time()print(f'測試本函數(shù)的執(zhí)行效率{end_time-start_time}')return inner# @timmer # index = timmer(index) def index():'''有很多代碼.....'''time.sleep(0.6) # 模擬的網(wǎng)絡延遲或者代碼效率print('歡迎登錄博客園首頁')return 666 ret = index() print(ret)def dariy():'''有很多代碼.....'''time.sleep(3) # 模擬的網(wǎng)絡延遲或者代碼效率print('歡迎登錄日記頁面') dariy() # index = timmer(index) # index() # dariy = timmer(dariy) @timmer dariy()
    • 版本六:被裝飾函數(shù)帶返回值

      import time # timmer裝飾器 def timmer(f):# f = indexdef inner():start_time = time.time()# print(f'這是個f():{f()}!!!') # index()r = f()end_time = time.time()print(f'測試本函數(shù)的執(zhí)行效率{end_time-start_time}')return rreturn inner@timmer # index = timmer(index) def index():'''有很多代碼.....'''time.sleep(0.6) # 模擬的網(wǎng)絡延遲或者代碼效率print('歡迎登錄博客園首頁')return 666 # 加上裝飾器不應該改變原函數(shù)的返回值,所以666 應該返回給我下面的ret, # 但是下面的這個ret實際接收的是inner函數(shù)的返回值,而666返回給的是裝飾器里面的 # f() 也就是 r,我們現(xiàn)在要解決的問題就是將r給inner的返回值。 ret = index() # inner() print(ret)
    • 版本七:被裝飾函數(shù)帶參數(shù)

      import time # timmer裝飾器 def timmer(f):# f = indexdef inner(*args,**kwargs):# 函數(shù)的定義:* 聚合 args = ('李舒淇',18)start_time = time.time()# print(f'這是個f():{f()}!!!') # index()r = f(*args,**kwargs)# 函數(shù)的執(zhí)行:* 打散:f(*args) --> f(*('李舒淇',18)) --> f('李舒淇',18)end_time = time.time()print(f'測試本函數(shù)的執(zhí)行效率{end_time-start_time}')return rreturn inner@timmer # index = timmer(index) def index(name):'''有很多代碼.....'''time.sleep(0.6) # 模擬的網(wǎng)絡延遲或者代碼效率print(f'歡迎{name}登錄博客園首頁')return 666 index('納欽') # inner('納欽')@timmer def dariy(name,age):'''有很多代碼.....'''time.sleep(0.5) # 模擬的網(wǎng)絡延遲或者代碼效率print(f'歡迎{age}歲{name}登錄日記頁面') dariy('李舒淇',18) # inner('李舒淇',18) 標準版的裝飾器;def wrapper(f):def inner(*args,**kwargs):'''添加額外的功能:執(zhí)行被裝飾函數(shù)之前的操作'''ret = f(*args,**kwargs)''''添加額外的功能:執(zhí)行被裝飾函數(shù)之后的操作'''return retreturn inner
  • 裝飾器的應用

    # 裝飾器的應用:登錄認證 # 這周的周末作業(yè):模擬博客園登錄的作業(yè)。裝飾器的認證功能。def login():passdef register():passstatus_dict = {'username': None,'status': False, }def auth(f):'''你的裝飾器完成:訪問被裝飾函數(shù)之前,寫一個三次登錄認證的功能。登錄成功:讓其訪問被裝飾得函數(shù),登錄沒有成功,不讓訪問。:param f::return:'''def inner(*args,**kwargs):'''訪問函數(shù)之前的操作,功能'''if status_dict['status']:ret = f(*args,**kwargs)'''訪問函數(shù)之后的操作,功能'''return retelse:username = input('請輸入用戶名').strip()password = input('請輸入密碼').strip()if username == 'taibai' and password == '123':print('登錄成功')status_dict['username'] = usernamestatus_dict['status'] = Trueret = f(*args, **kwargs)return retelse:print('登錄失敗')return inner @auth # article = auth(article) def article():print('歡迎訪問文章頁面') @auth def comment():print('歡迎訪問評論頁面') @auth def dariy():print('歡迎訪問日記頁面')article() # inner() comment() #inner() dariy()
  • 今日總結

  • 預習內容

  • 預習內容我會以md文件發(fā)到群里。

    轉載于:https://www.cnblogs.com/miseryGOD/p/10879334.html

    總結

    以上是生活随笔為你收集整理的python 14 装饰器的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內容還不錯,歡迎將生活随笔推薦給好友。