zoukankan      html  css  js  c++  java
  • python自学第9天,装饰器

    装饰器:本质是函数(装饰其它函数) 就是为其它函数添加附加功能

    原则:1.不能修改被装饰函数的源代码

       2.不能修改被装饰的函数的调用方式

    实现装饰器知识储备:

    1.函数即变量

    2.高阶函数:a.把一个函数名当做实参传给另外一个函数,(在不修改被装饰函数源代码情况下添加功能)b.返回值中包含函数名(不修改函数的调用方式)

    3.嵌套函数a.

    匿名函数:

    lambda

    高阶函数
    import time
    def car():#定义一个源代码
        print ("in the car")
    
    
    def change_test(func):#定义一个改变函数的函数,传递函数参数
        time_start=time.time()
        time.sleep(3)
        time_stop=time.time()
        print("sleep in the change_test %s"%(time_stop-time_start))
        return func
    car=change_test(car)#把内存地址赋给原来的函数标识
    car()
    

     实现装饰函数


    import time
    #实现功能,在不能改变原来的函数前添加功能。

    #实现在测试函数的运行时间,不能改变原函数

    def deco(func):#定义一个装饰器
    def run_time(*args,**kwargs):#嵌套一个运行时间的函数 无论传什么参数都可以
    start_time=time.time()
    func(*args,**kwargs)#运行 函数 无论传什么参数都可以
    stop_time=time.time()
    print("该函数运行的时间是%s"%(stop_time-start_time))

    return run_time#返回嵌套函数的内存地址


    @deco#这一步是需要在哪个函数上装饰就在哪个函数前面加装饰。 它的功能相当于是比如 car=deco(car)
    def car():#定义一个原函数
    time.sleep(2)
    print("in the car")
    @deco
    def baike(name):#有参数的函数
    print("in the baike %s"%name)

    car()
    baike("hunterYi")

      

  • 相关阅读:
    Java并发编程:volatile关键字解析(转)
    Java并发编程 Synchronized及其实现原理
    (a++)+(++a)=?
    Java集合中那些类是线程安全的
    Servlet 与 CGI 的比较
    JAVA中常见的锁以及其特性
    总结一下hashMap和hashtable方面的知识点
    Which statement is true?
    下面哪段程序能够正确的实现了GBK编码字节流到UTF-8编码字节流的转换:
    Kafka 详解(转)
  • 原文地址:https://www.cnblogs.com/hunterYi/p/8806544.html
Copyright © 2011-2022 走看看