日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

python进阶(小白也能看懂)——装饰器浅谈(一)

發布時間:2025/3/19 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python进阶(小白也能看懂)——装饰器浅谈(一) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

python進階(小白也能看懂)——裝飾器(一)

第四篇

文章目錄

  • python進階(小白也能看懂)——裝飾器(一)
    • 1.函數基礎知識
      • 例子1.1
      • 例子1.2
      • 例子1.3
      • 例子1.4
    • 2.不帶參數的裝飾器
    • 3.帶參數的裝飾器
    • 參考

1.函數基礎知識

談裝飾器前,先了解一下函數的基礎知識

  • python中一切都是對象,函數也是對象,可以將一個函數賦值給另一個變量
  • 函數可以嵌套,即在一個函數內部定義另一個函數
  • 函數中可以將另一個函數作為返回值返回
  • 函數可以作為參數傳給另一個函數
  • 例子1.1

    ## 定義加法函數 def add_a_b(a, b):print(a+b) ## 將該加法函數賦給t,這樣t也就是一個函數了,擁有加法功能 t = add_a_b t(1,2)""" 3 """

    例子1.2

    # 在函數內部定義函數 def outer():print("I'm in outer")def inner():print("I'm in inner of outer")## 調用inner函數,且只能在ouer函數里面調用innerinner()outer() """ I'm in outer I'm in inner of outer """ inner() """ NameError: name 'inner' is not defined """

    例子1.3

    # 函數中將另一個函數作為返回值返回 def outer():print("I'm in outer")def inner():print("I'm in inner of outer")## 調用inner函數,且只能在ouer函數里面調用innerreturn inner# 這里p相當于inner p = outer() p()""" I'm in outer I'm in inner of outer """

    例子1.4

    import timedef runningtime(func):def wrapper(*args, **kwargs):## 添加計時功能start = time.time()func(*args, **kwargs)interval = time.time() - startprint("運行完{}花費了{}秒".format(func.__name__, interval))return wrapperdef add_a_b(a, b):print(a+b)## equipped_func接收從runningtime返回的函數 equipped_func = runningtime(add_a_b) equipped_func(1000,54489)""" 55489 運行完add_a_b花費了0.0009965896606445312秒 """

    2.不帶參數的裝飾器

    所謂裝飾器是作用在函數身上的,主要是豐富函數的功能,并且非常方便。
    假設我們寫了10000個函數,我們想測試運行每個函數所需要的時間,那么可以用裝飾器添加計算時間的功能:

    import time from functools import wraps## 定義裝飾器 def runningtime(func):@wraps(func)def wrapper(*args, **kwargs):## 添加計時功能start = time.time()func(*args, **kwargs)interval = time.time() - startprint("運行完{}花費了{}秒".format(func.__name__, interval))return wrapper@runningtime def add_a_b(a, b):print(a+b)add_a_b(1000,54489)""" 55489 運行完add_a_b花費了0.00099945068359375秒 """

    與例子1.4對比不難發現在函數前面加上@runningtime的作用就相當于function = runningtime(function)。

    3.帶參數的裝飾器

    from functools import wraps import time## 帶參數的裝飾器 def logging(logfile):def runningtime(func):@wraps(func)def wrapper(*args, **kwargs):## 添加計時功能start = time.time()func(*args, **kwargs)interval = time.time() - startprint("運行完{}花費了{}秒".format(func.__name__, interval))## 將日志寫入日志文件中with open(logfile,'a') as f:f.write(str(interval)+'\n')return wrapperreturn runningtime@logging('test.txt') def add_a_b(a, b):print(a+b)add_a_b(1000,54489)""" 55489 運行完add_a_b花費了0.0030028820037841797秒 """

    在這里,帶參數的裝飾器起的作用相當于function = logging('test.txt')(function)

    參考

    定義一個帶參數的裝飾器

    總結

    以上是生活随笔為你收集整理的python进阶(小白也能看懂)——装饰器浅谈(一)的全部內容,希望文章能夠幫你解決所遇到的問題。

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