zoukankan      html  css  js  c++  java
  • python进阶:装饰器

     1.闭包

      简单理解:闭包就是多层函数的嵌套,外层函数的返回值是内层函数的引用。

    def out_func(n):
        num = 100
        def in_fucn(*args,**kwargs):
         # nonlocal num
    if n % 2 == 0: # 里面没有修改num的值,直接使用可以,如果变成 num += n 则会报错,因此需要使用前加上nonlocal num return n + num
           # return num += n
    else: return n- num return in_fucn test = out_func(10) ret = test() print(ret) # 结果 110

      闭包的作用就是,装饰器

     2.装饰器

      简单的理解:就是不改变函数结构的情况下,给函数增加功能

    def outter(func):
    
        def inner(*args,**kwargs):
            print("今天星期五")
            func(*args,**kwargs)
            print("下午我和,小红去吃烤鱼")
        return inner
    
    
    def test(*args,**kwargs):
        print("今天天气很不错")
    
    test = outter(test) # 标准写法
    test() # 普通的调用了test函数,但是给函数上下都多打印了一行数字。
    
    # 结果
    今天星期五
    今天天气很不错
    下午我和,小红去吃烤鱼

       装饰器实现检测函数运行时间的功能

    import time
    def outter(func):
    
        def inner(*args,**kwargs):
            start_t = time.time()
            func(*args,**kwargs)
            end_t = time.time()
            print("函数test的运行时间为{}s".format(end_t-start_t))
        return inner
    
    
    def test(*args,**kwargs):
        time.sleep(10)
        
    test = outter(test)
    test()
    
    # 结果
    函数test的运行时间为10.098577499389648s

     优雅的写法

    import time
    def outter(func):
    
        def inner(*args,**kwargs):
            start_t = time.time()
            func(*args,**kwargs)
            end_t = time.time()
            print("函数test的运行时间为{}s".format(end_t-start_t))
        return inner
    
    @outter
    def test(*args,**kwargs):
        time.sleep(10)
    
    test()
    
    # 结果
    函数test的运行时间为10.000571966171265s
  • 相关阅读:
    fastjson(转)
    FastJson
    FastJson处理Map List 对象
    spring-data-redis RedisTemplate操作
    Spring-data-redis:特性与实例(转载)
    Spring Boot 支持多种外部配置方式
    springBoot----@ConditionalOnxxx相关注解总结
    Centos7 install Openstack
    Centos7 install Openstack
    Centos7 Openstack
  • 原文地址:https://www.cnblogs.com/meloncodezhang/p/11688521.html
Copyright © 2011-2022 走看看