當前位置:
首頁 >
python进阶(小白也能看懂)——装饰器浅谈(一)
發布時間:2025/3/19
34
豆豆
生活随笔
收集整理的這篇文章主要介紹了
python进阶(小白也能看懂)——装饰器浅谈(一)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
python進階(小白也能看懂)——裝飾器(一)
第四篇
文章目錄
- python進階(小白也能看懂)——裝飾器(一)
- 1.函數基礎知識
- 例子1.1
- 例子1.2
- 例子1.3
- 例子1.4
- 2.不帶參數的裝飾器
- 3.帶參數的裝飾器
- 參考
1.函數基礎知識
談裝飾器前,先了解一下函數的基礎知識
例子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個函數,我們想測試運行每個函數所需要的時間,那么可以用裝飾器添加計算時間的功能:
與例子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进阶(小白也能看懂)——装饰器浅谈(一)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python进阶(小白也能看懂)——Ma
- 下一篇: Python的第一种数据类型——Numb