zoukankan      html  css  js  c++  java
  • 关于Python中的装饰器理解

    装饰器的作用就是代码重用!!!!
    import time
    
    # 定义一个能够直接测试程序运行时间的代码
    def timeNumber(func):
    	frontTime = time.time()
    	func()
    	endTime = time.time()
    	print("这个程序花了%f毫秒" % ((endTime - frontTime) * 1000))
    
    def myfunc():
    	print("function Go........")
    	time.sleep(2)
    	
    print("调用函数执行》》》》》》")
    timeNumber(myfunc)
    print("调用函数执行结束 《《《《《《")


    在每次都直接调用函数,并且在结束后,myfunc并没用变为一个带有timeNumber函数功能的新函数,如果要再用timeNumber功能又得重新调用timeNumber(myfunc)比较麻烦

    这时候就可以使用装饰器来实现一劳永逸的效果,看下面:

    def timeNumber(func):
    	def wrapper():
    		frontTime = time.time()
    		func()
    		endTime = time.time()
    		print("这个程序花了%f毫秒" % ((endTime - frontTime) * 1000))
    	return wrapper
    
    def myfunc():
    	print("function Go........")
    	time.sleep(2)
    	
    print("装饰器调用执行》》》》》》")
    myfunc = timeNumber(myfunc)
    myfunc()
    print("装饰器调用执行结束 《《《《《《")
    print("重新调用myfunc()")
    myfunc()
    执行结果,只要装饰一次,则调用myfunc()则后续都有timeNumber()函数的功能

    为了简便使用装饰器语法糖@,效果等同于 这一句 myfunc = timeNumber(myfunc)

    @timeNumber
    def myfunc():
    	print("function Go........")
    	time.sleep(2)
    调用结果与上面一致


    如果在用语法糖装饰后,调用myfunc的__name__则显示的是wrapper的名字,表明已经被装饰


  • 相关阅读:
    Spring框架开发的三种模式
    IDEA 的Surround With快捷键
    Spring框架IOC和AOP的实现原理与详解
    mitmproxy 安装配置
    adb 使用
    小象代理
    requests 模块查看请求的ip地址
    smtplib 邮件模块
    淘宝直播数据爬取 + 淘宝模拟登陆
    postgresql基础操作
  • 原文地址:https://www.cnblogs.com/jlxa162hhf/p/14161270.html
Copyright © 2011-2022 走看看