python装饰器

本文深入探讨了Python装饰器的概念,从基本形式到内嵌和闭包函数的使用,还包括带参数及类装饰器的讲解。同时,文章介绍了Python内置的@property、@staticmethod和@classmethod装饰器,阐述它们在类方法修饰中的作用。
摘要由CSDN通过智能技术生成

装饰器

一、概念

1. 装饰器(Decoration):
	    - 装饰器是一种设计模式,经常用来实现"面向切面的编程"(AOP: 实现在不修改源代码的情况下,给程序动态添加功能的一种技术)
	    
2. 装饰器的作用:
	    - 装饰器允许向一个现有的对象(函数)添加新的功能,同时又不改变其结构
	    - 可以抽离出大量的函数中的和业务无关的功能 

3. 应用场景:
		- 插入日志、性能测试、事务处理、缓存、中间件、权限控制等

举个栗子:现在需要计算某个函数的执行时间

import time


def fun1():
    start = time.time()
    s = 0
    for i in range(1, 100001):
        s += i
    print(f'和为:{s}')
    t = time.time() - start
    print(f'函数的执行时间为:{t:.10f}')


fun1()


def fun2():
    start = time.time()
    s = 1
    for i in range(1, 100001):
        s *= i
    print(f'乘积为:{s}')
    t = time.time() - start
    print(f'函数的执行时间为:{t:.10f}')


fun2()

如果要把计算时间的代码抽离出来,此时就可以使用装饰器来实现

import time
def get_time(func):
	def wrapper():
        start = time.time()
	    func()
        t = time.time() - start
        print(f'函数的执行时间为:{t}')
     return wrapper
    
@get_time    
def fun2():
    s = 1
    for i in range(1, 100001):
        s *= i
    print(f'乘积为:{s}')

fun2()  

二、装饰器详解

1、装饰器
装饰器:
1. 关键字:@,在被修饰的函数的前一行加入
2. 本质:装饰器的本质就是一个函数
3. 原理:在调用被装饰的函数时,被装饰的函数体的代码并不会被直接执行。而是在调用被装饰的函数时,将该函数传递给装饰器
2、装饰器的基本形式

并不是真正的装饰器(有问题)

# 装饰器函数必须要有一个参数,来接收被装饰的函数(名)
def my_decoration(func):
    #print('这里写要装饰的东西,要给被装饰的函数添加的功能')
    print('*'
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值