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
    
             
    
  • 相关阅读:
    pgspider sqlite mysql docker 镜像
    pgspider docker 镜像
    pgspider基于pg 的高性能数据可视化sql 集群引擎
    diesel rust orm 框架试用
    golang 条件编译
    Performance Profiling Zeebe
    bazel 学习一 简单java 项目运行
    一个好用node http keeplive agnet
    gox 简单灵活的golang 跨平台编译工具
    mailhog 作为smtp server mock工具
  • 原文地址:https://www.cnblogs.com/127-2933/p/11867932.html
Copyright © 2011-2022 走看看