zoukankan      html  css  js  c++  java
  • decorate2装饰器

    import time

    def timer(func):

          def deco(arg1):

                start_time=time.time()

                func(arg1)

                stop_time=time.time()

                print("the func run time is %s"%(stop_time-start_time))

            return deco

    @timer             

    def test1(name)

          print("test1",name)

    test1("zaizai")

    首先对于这个代码,@timer意味着test1=timer(test1),因为之前定义了timer(func)这个函数,而这个函数下面的逻辑是一个新的函数,deco,并且返回了deco的内存地址,所以这意味着timer(func),deco内存地址是一样的,然后有了test1=timer(test1)之后意味着,test1,timer(func),deco的内存地址是一样的,所以test1(),deco()是一样的,而test1这个函数是带参数的,所以,test1("zaizai")是可以运行的,他会运行deco("zaizai"),然后记录开始时间,运行func("zaizai"),然后print出来。

    假如两个arg1都没有,只运行test1(),这时候为什么运行不了?因为这时候其实是运行deco(),然后到func(),也就是运行test1(),而这时候没有参数,因此不能运行。

    如果参数不固定怎么办,将name,改成*args,**args即可

  • 相关阅读:
    分享一下用终端的命令来恢复丢失的硬盘分区表 (转)
    Smart Link
    underrun || overrun
    mtr命令详解诊断网络路由
    tracert traceroute
    OE1、OE2、ON1、ON2路由有什么区别?
    GRE tunnel 2
    【SAP HANA】新建账户和数据库(2)
    【SAP HANA】SAP HANA开篇(1)
    入职一周
  • 原文地址:https://www.cnblogs.com/zaizaiaipython/p/7810913.html
Copyright © 2011-2022 走看看