• 闭包和装饰器


    用例:

    #闭包的应用
    
    def create(pos):
        def game(move_direction,step):
            '''
            实现点在坐标中移动
            :param move_ddirection: 移动方向
            :param step: 移动步长
            :return:
            '''
            x=pos[0]+move_direction[0]*step     #这里的pos[0]代表x轴初始值位置和move_direction[0]为x轴移动的方向
            y=pos[1]+move_direction[1]*step     #这里的pos[0]代表y轴初始值位置和move_direction[0]为y轴移动的方向
            pos[0]=x                            #将更新的x轴位置赋值给pos变量的x轴
            pos[1]=y                            #将更新的y轴位置赋值给pos变量的y轴
            return pos       		#返回更新后的坐标位置的函数参数
        return game         		#返回create(pos)的值为game函数名
    game=create([10,1])   		 #设置坐标初始位置
    print(game([1,0],2))   		 #打印移动后的位置
    

    #装饰器的应用
    import time
    def count(mysums):
        mysum=0
        for mysum in range(mysums):
            mysum+=mysums
    
    def count_time(func):    #用于传递调用的函数给装饰器函数
        def wrapper(*args,**kwargs):   #装饰器,用于包装调用的函数
            start_time=time.time()  #调用函数前
            func(*args,**kwargs)                  #调用函数
            end_time=time.time()    #执行完函数后的时间
            print(end_time-start_time)  #打印执行函数的时间
        return wrapper      #返回装饰器函数名称
    
    
    
    f=count_time(count)     #将函数count_time(count)把count函数作为参数传递,同时把返回值wrapper(装饰器函数名称)赋值给变量f
    f(10000000)      #这个相当于wrapper(1,2),也就是调用装饰器函数,同时把参数传递给被装饰的函数func作为参数使用
    
    # @count_time     #使用装饰器,给下面的函数
    #创建需要调用的函数
    # def count(mysums):
    #     mysum=0
    #     for mysum in range(mysums):
    #         mysum+=mysums
    
    # count(1000000000)
    
    @count_time     #这个是调用装饰器的语法,直接使用装饰器,下面写需要装饰的函数就可以了
    def count(results):
        result=1
        for result in range(results):
            result*=2
        print(result)
    count(1000000000)
    
    
    #通过两个被装饰的函数可以知道,装饰器不需要做任何修改,就可以同时给两个功能不同的函数使用,这个装饰器的作用就是用来计算函数运行的时间,至于是什么函数它不关心,需要就只管调用就可以了,和不用装饰器实现的区别就是,多个函数如果要想使用类似计算运行时间这种功能,需要给每个函数进行条件,如果要把改变功能,需要给每个函数都做修改,而装饰器就不需要,直接对装饰器修改,所有的函数就都会根据改变的功能应用上,无论是使用功能还是修改功能上都极大的节省了时间和代码量
    
  • 相关阅读:
    [转载]性能测试工具 2 步解决 too many open files 的问题,让服务器支持更多连接数
    资源限制 ( resource limit 或 rlimit ),是 Linux 内核控制 用户 或 进程 资源占用的机制。
    运维实战案例之“Too many open files”错误与解决方法
    too many open files问题详解
    head tail diff -c fff hhh 前5行 后5行 区别 动态显示文本最新信息: $tail -f crawler.log
    jQuery 1.x和jQuery 2.x的最大差别
    实战:自己定义脚本关闭mysql-mysql 5.6.19
    AudioQueue(AudioToolBox)的原理与使用
    quartz2D 图片剪切
    Oracle ODI 11g 安装与技术开发文档
  • 原文地址:https://www.cnblogs.com/endmoon/p/9676418.html
Copyright © 2020-2023  润新知