zoukankan      html  css  js  c++  java
  • python3 闭包函数,装饰器

    闭包函数:
    1、定义在函数内部的函数
    2、包含对外部作用域而非全局作用域的引用
    特点:
    1、自带作用域
    2、延迟计算(取到内存地址,加括号执行)

    def 外部函数(func):
    def 内部函数(*args,**kwargs):
    pass
    return 内部函数

    f=外部函数(func)

    print(f.__closure__)
    print(f.__closure__[0].cell_contents)

    def f1():
        name = 'egon'
        money = 10
        def tell_ino():
            print('%s have money %s' %(name, money))
        return tell_ino()
    
    f1()
    

     

        优点:
    1 自带作用域
    2 惰性延迟


    *********************************************************************************
    1、开放封闭原则,对扩展是开房的,对修改是封闭的
    2、装饰器:装饰器本质是可以任意调用对象,被装饰的对象也可以是任意可调用对象
    功能:在不修改被装饰对象源代码以及调用方式的前提下,对其添加新功能
    原则:
    1、不修改源代码
    2、不修改调用方式
    目标:添加新功能
    *********************************************************************************


    装饰器
    1 开放封闭原则:对扩展开放,对修改(修改源代码和调用方式)是封闭的

    2 什么是装饰器:装饰器本质是任意可调用对象,被装饰器对象也可以是任意可调用对象
    装饰器遵循的原则:不修改被装饰对象的源代码和调用方式

    3 定义装饰器

    def 外部函数(func):
    def 内部函数(*args,**kwargs):
    pass
    return 内部函数

    4 装饰器的语法:@
    1.卸载被装饰对象的正上方单独一行
    2.可叠加多个,执行顺序是自下而上
    定义阶段外部函数的执行顺序是自下而上
    调用阶段内部函数的执行顺序是自上而下
    @timmer #index=timmer(index)
    def index():
    pass
    import time
    import random
    
    def timmer(func):
        # func = index
        def wrapper():
            start_time = time.time()
            func()
            stop_time = time.time()
            print('run time is %s' %(stop_time - start_time))
        print(wrapper)
        return wrapper
    
    @timmer
    def index():
        time.sleep(random.randrange(1,2))
        print('welcome to my index page !')
    
    # index = timmer(index)
    index()
    
    
    

      

     
     
  • 相关阅读:
    12.16省选模拟t2 消防
    12.17省选模拟t3 围豆豆
    12.17省选模拟t1 生日礼物
    CF1322D Reality Show
    winform拖动无边框窗体
    关于ToolTip控件在XP系统中问题
    JDK源代码里面的一个for循环
    IIS5.1 无法运行asp.net网站但可访问静态页的解决方案
    winform窗体去掉标题头部的两种方式
    C# 语法之泛型
  • 原文地址:https://www.cnblogs.com/lucaq/p/7050362.html
Copyright © 2011-2022 走看看