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

    装饰器有啥用,装饰器可以在不改变原有函数的前提下,对代码增加功能,实现代码解耦。要学装饰器,必须要搞懂闭包,二者是相辅相成的。

    看上面这个图,我在调用test1(12)的时候发生了什么?@set_func ,等价于test1 = set_func(test1),由此可知我在调用set_func的时候,把test1函数当做参数传递进去了,又因为set_func函数是一个闭包,里面函数call_func,用到了set_func的变量,那么此时,我在call_func里面调用func(num),就相当于我调用了test1(),在来看set_func的返回值是返回了call_func在内存中的地址,我再去调用test1(),就相当于我调用了call_func,

    代码运行时间的装饰器:

    import time
    
    def run_time(func):
        def end_time(*args):
            start_time = time.time()
            func(*args)
            stop_time = time.time()
            print('代码运行时间为:{}'.format(stop_time - start_time))
        return end_time

    有返回值的装饰器:

    def set_func(func):
        def call_func(*args,**kwargs):
            print('---这是权限验证1---')
            return func(*args,**kwargs)
    
        return call_func
    
    
    @set_func          #等价于test1 = set_func(test1)
    def test1(num,*args,**kwargs):
        print('---test1---{0}'.format(num))
        print('---test1---{0}'.format(args))
        print('---test1---{0}'.format(kwargs))
        return 'ok','200'
    
    test1(12)
  • 相关阅读:
    python基础语法
    java关键字之final
    汉字占几个字节?
    Java学习记录(补充二:面对对象基础复习,习题)
    Java学习记录(补充二)
    Java学习记录(补充一(以习题为主:判断,循环语句))
    Java学习记录
    JS学习记录(jQuery补充一)
    JS学习记录(jQuery)
    JS学习记录(数组补充一)
  • 原文地址:https://www.cnblogs.com/xiamaojjie/p/12101891.html
Copyright © 2011-2022 走看看