python装饰器

博客介绍了装饰器,其本质是函数,能为其他函数添加新功能,遵循开放封闭原则且不改变调用方式。装饰器由高阶函数、函数嵌套和闭包构成,还给出计算函数运行时间和登入的例子,此外提到类中可通过继承添加新属性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

装饰器

装饰器定义:本质就是函数,功能是为其他函数添加新功能

1.不修改被装饰函数的源代码(开放封闭原则)

2.为被装饰函数添加新功能后,不修改被修饰函数的调用方式

装饰器=高阶函数+函数嵌套+闭包

高阶函数定义:
1.函数接收的参数是一个函数名

2.函数的返回值是一个函数名

 

例1:一个计算函数运行时间的装饰器(装饰器中无参数)

import time
def timer(func):
    def wrapper(*args,**kwargs):
        start_time=time.time()
        res=func(*args,**kwargs)   #调用以参数形式传入的函数
        stop_time=time.time()
        print('函数[%s],运行时间是[%s]' %(func,stop_time-start_time))
        return res
    return wrapper


@timer  #@timer就等同于cal=timer(cal)=wrapper
def cal(array):
    res=0
    for i in array:
        res+=i
    return res

print(cal(range(100000))) #-->wrapper(range(1000)) -->res=cal(range(1000))
只要记住 @装饰器 就相当于 obj = 装饰器(obj) 这里的obj为被装饰的类


例2:一个登入的例子(装饰器中带有参数)

user_list=[
    {'name':'alex','passwd':'123'},
    {'name':'linhaifeng','passwd':'123'},  #定义一个已经存在的用户表
    {'name':'wupeiqi','passwd':'123'},
    {'name':'yuanhao','passwd':'123'},
]

current_user={'username':None,'login':False}   #判断用户是否已经登入
def auth(auth_type='file'):
    def auth_deco(func):
        def wrapper(*args,**kwargs):
            if auth_type == 'file':   #判断用户的类型
                if current_user['username'] and current_user['login']:#判断用户是否登入
                    res=func(*args,**kwargs)
                    return res
                username=input('用户名: ').strip()
                passwd=input('密码: ').strip()

                for index,user_dic in enumerate(user_list): #验证用户信息
                    if username == user_dic['name'] and passwd == user_dic['passwd']:
                        current_user['username']=username   #保存登入状态
                        current_user['login']=True
                        res=func(*args,**kwargs)
                        return res
                        break
                else:                               #信息错误
                    print('用户名或者密码错误,重新登录')
            elif auth_type == 'ldap': #如果用户类型是'ldap',直接登入
                print('巴拉巴拉小魔仙')
                res=func(*args,**kwargs)
                return res
        return wrapper
    return auth_deco


#auth(auth_type='file')就是在运行一个函数,然后返回auth_deco,所以@auth(auth_type='file')
#就相当于@auth_deco,只不过现在,我们的auth_deco作为一个闭包的应用,外层的包auth给它留了一个auth_type='file'参数
@auth(auth_type='file')  #-->@auth_deco -->index=auth(index)=wrapper -->index()相当于wrapper()
def index():
    print('欢迎来到主页面')

@auth(auth_type='ldap')
def home():
    print('这里是你家')

def shopping_car():
    print('查看购物车啊亲')

@auth(auth_type='file')
def order():
    print('查看订单啊亲')


index()

登入页面判断用户是否登入,如果用户的类型是'ldap',直接登入.如果用户类型是'file',判断用户是否是登入状态,没有登入的话进行验证,验证通过之后将该用户保存为登入状态,下次进入其他页面不用登入.

 

 

装饰器的作用是在不改变函数的情况下为函数添加新的功能.

类中也有类似的方法,可以通过继承的方式来给已经定义了的类添加新的属性.

class animal:
    print('run')

class cat(animal):
    def __init__(self,name):
        self.name = name

c1 = cat('ll')   #会先调用父类的属性,在调用子类的,如果继承多个类,调用顺序从左往右

 

内容概要:该论文深入研究了液压挖掘机动臂下降势能回收技术,旨在解决传统液压挖掘机能耗高的问题。提出了一种新型闭式回路势能回收系统,利用模糊PI自整定控制算法控制永磁无刷直流电动机,实现了变转速容积调速控制,消除了节流和溢流损失。通过建立数学模型和仿真模型,分析了不同负载下的系统性能,并开发了试验平台验证系统的高效性和节能效果。研究还涵盖了执行机构能量分布分析、系统元件参数匹配及电机控制性能优化,为液压挖掘机节能技术提供了理论和实践依据。此外,通过实验验证,该系统相比传统方案可降低28%的能耗,控制系统响应时间缩短40%,为工程机械的绿色化、智能化发展提供了关键技术支撑。 适合人群:从事工程机械设计、制造及维护的工程师和技术人员,以及对液压系统节能技术感兴趣的科研人员。 使用场景及目标:①理解液压挖掘机闭式回路动臂势能回收系统的原理和优势;②掌握模糊PI自整定控制算法的具体实现;③学习如何通过理论建模、仿真和实验验证来评估和优化液压系统的性能。 其他说明:此研究不仅提供了详细的理论分析和数学建模,还给出了具体的仿真代码和实验数据,便于读者在实际工作中进行参考和应用。研究结果表明,该系统不仅能显著提高能源利用效率,还能延长设备使用寿命,降低维护成本,具有重要的工程应用价值。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值