闭包函数与装饰器

一:闭包函数

     闭:指的是一个函数的一个内部函数

    包:指的是该函数包含对外部作用域的(而非全局作用域)名字的引用

    # def outter():
    #     x = 1
    #     def inner():
    #         print(x)
    #     return inner
    # f=outter()
    # def f2():
    #     x=1111111
    #     f()
    # f2()
    # def f3():
    #     x=4444444444444
    #     f()

    ·# f3()    

     作用域关系在函数的定义阶段已经固定死了,与调用位置无关。

     即在任意阶段调用函数都需要跑到定义函数的阶段去寻找作用域关系

     import requests
     def outter(url):
     # url='https://www.baidu.com'
     def get():
            response=requests.get(url)
            if response.status_code == 200:
            print(response.text)
    return get
    baidu=outter('https://www.baidu.com')
    python=outter('https://www.python.org')
    baidu()
    baidu()
    python()

    python()

二:装饰器,闭包函数的一种应用场景=》装饰器

   1、什么是装饰器
    器指的是工具,而程序中的函数就具备某一功能的工具
    装饰指的是为被装饰器对象添加额外功能
    就目前的知识来看:
        定义装饰器就是定义一个函数,只不过该函数的功能是用来为
        其他函数添加额外的功能
    其实:
        装饰器本身其实可以是任意可调用的对象
        被装饰的对象也可以是任意可调用的对象
    2、为什么要用装饰器
           软件的维护应该遵循开放封闭原则
           开放封闭原则指的是:
        软件一旦上线运行后对修改源代码是封闭的,对扩展功能的是开放的
        这就用到了装饰器
    装饰器的实现必须遵循两大原则:
        1、不修改被装饰对象的源代码
        2、不修改被装饰对象的调用方式
    装饰器其实就在遵循1和2原则的前提下为被装饰对象添加新功能

         3、如何用装饰器

            无参装饰器 

           #装饰器语法糖
           # 在被装饰对象正上方,并且是单独一行写上@装饰器名
           # import time
           # def timmer(func):
           #     #func=最原始的index
           #     def wrapper(*args,**kwargs):
           #         start=time.time()
           #         res=func(*args,**kwargs)
           #         stop=time.time()
           #         print('run time is %s' %(stop - start))
          #         return res
          #     return wrapper
          # @timmer # index=timmer(index)
          # def index():
          #     print('welcome to index')
          #     time.sleep(3)
          #     return 123
          # @timmer # home=timmer(home)
          # def home(name):
          #     print('welcome %s to home page' %name)
          #     time.sleep(2)
          # res=index()

          # home('egon')

          有参装饰器

          import time
          current_user={'user':None}
          def auth(engine='file'):
          def deco(func):
              def wrapper(*args,**kwargs):
                   if current_user['user']:
                   #已经登陆过
                        res = func(*args, **kwargs)
                        return res
                   user=input('username>>: ').strip()
                   pwd=input('password>>: ').strip()
                   if engine == 'file':
                    # 基于文件的认证
                           if user == 'egon' and pwd == '123':
                                  print('login successful')
                                   # 记录用户登陆状态
                                  current_user['user']=user
                                  res=func(*args,**kwargs)
                                   return res
                            else:
                                   print('user or password error')
                   elif engine == 'mysql':
                          print('基于mysql的认证')
                    elif engine == 'ldap':
                          print('基于ldap的认证')
                    else:
                          print('无法识别认证来源')
                return wrapper
          return deco
@auth(engine='mysql') # @deco #index=deco(index) #index=wrapper
def index():
    print('welcome to index page')
    time.sleep(1)
@auth(engine='mysql')
def home(name):
    print('welecome %s to home page' %name)
    time.sleep(0.5)
index()

home('egon')


          


【直流微电网】径向直流微电网的状态空间建模线性化:一种耦合DC-DC变换器状态空间平均模型的方法 (Matlab代码实现)内容概要:本文介绍了径向直流微电网的状态空间建模线性化方法,重点提出了一种基于耦合DC-DC变换器状态空间平均模型的建模策略。该方法通过对系统中多个相互耦合的DC-DC变换器进行统一建模,构建出整个微电网的集中状态空间模型,并在此基础上实施线性化处理,便于后续的小信号分析稳定性研究。文中详细阐述了建模过程中的关键步骤,包括电路拓扑分析、状态变量选取、平均化处理以及雅可比矩阵的推导,最终通过Matlab代码实现模型仿真验证,展示了该方法在动态响应分析和控制器设计中的有效性。; 适合人群:具备电力电子、自动控制理论基础,熟悉Matlab/Simulink仿真工具,从事微电网、新能源系统建模控制研究的研究生、科研人员及工程技术人员。; 使用场景及目标:①掌握直流微电网中多变换器系统的统一建模方法;②理解状态空间平均法在非线性电力电子系统中的应用;③实现系统线性化并用于稳定性分析控制器设计;④通过Matlab代码复现和扩展模型,服务于科研仿真教学实践。; 阅读建议:建议读者结合Matlab代码逐步理解建模流程,重点关注状态变量的选择平均化处理的数学推导,同时可尝试修改系统参数或拓扑结构以加深对模型通用性和适应性的理解。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值