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

    闭包函数

    什么是闭包函数:

    ​ 闭包函数是 函数嵌套、函数对象、名称空间与作用域 结合体

    闭包函数注意事项:

    1. 闭包函数必须在函数内部定义
    2. 闭包函数可以引用外层函数的名字
    #直接传参
    def func(x):
        print(x)
        
    func(1000)
    
    1000
    
    #通过闭函数传参
    def outer(number):
        def inner():
            print(number)
    
        return inner
    
    
    func = outer(1000)  # --->inner地址 ----> func变量名
    
    func() #---> inner地址   
    

    装饰器

    什么是装饰器 : 在函数中用来给添加新功能的工具

    ​ 为什么要用装饰器:

    			为了提高代码的可读性,防止代码的冗余
    

    怎么用装饰器:

    1. 不修改被装饰对象的源代码
    2. 不修改被装饰对象的调用方式

    被装饰对象: -----> 需要添加功能 函数

    装饰器:------> 被装饰对象添加的新功能 的 函数

    time_record --- > 装饰器

    # 统计下载电影函数的运行时间
    import time
    def download_movie():
        print('电影开始下载...')
        time.sleep(3)
        print('电影下载完成...')
    start_time = time.time()
    download_movie()
    end_time = time.time()
    print(f'消耗时间:{end_time - start_time}')
    
    电影开始下载...
    电影下载完成...
    消耗时间:3.000986099243164
    # 装饰器写法:
    
    import time
    def download_movie():
        print('电影开始下载...')
        time.sleep(3)
        print('电影完成下载...')
    def time_record(func):
        def inner():
            start_time = time.time()
            func()
            end_time = time.time()
            print(f'消耗数间:{end_time - start_time}')
        return inner
    
    download_movie = time_record(download_movie)
    download_movie()
    

    装饰器的语法糖 ,是属于装饰器的

    @: 装饰器的语法糖

    注意: 在使用装饰器语法糖时,装饰器必须定义在被装饰对象之上

    import time 
    #统计函数执行时间装饰器
    def wrapper(func):
        def inner(*args, **kwargs):# 被装饰对象
            #调用前新增功能
            start_time = time.time()
            #调用被装饰对象,并接收返回值
            res = func(*args, **kwargs)
            #调用后添加新功能
            end_time = time.time()
            print(end_time - start_time)
            
            return res
        return inner
    
             
    
  • 相关阅读:
    React Native 架构演进
    React Native 架构一览
    React Native 在 Airbnb 的起起落落
    React Native简史
    图解云服务模型的演进
    伯克利研究员们眼中的Cloud Computing
    彻底理解 IaaS、PaaS、SaaS
    JS更随机的随机数
    JS自动化
    fingerprint2 计算浏览器指纹分析
  • 原文地址:https://www.cnblogs.com/127-2933/p/11867932.html
Copyright © 2011-2022 走看看