• Python基础教程:装饰器的详细教程


    前言

    嗨喽,大家好呀~这里是爱看美女的茜茜呐

    一、什么是装饰器

    目的:给func()方法,增加一个功能,在fun()执行期间,同时把fun()执行速率机算出来

    import time
    def func():
        print('嘻嘻哈哈')
    
    
    start_time = time.time()
    time.sleep(0.1)
    func()
    end_time = time.time()
    print('----> 执行效率%s'%(end_time - start_time))
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    👇 👇 👇 更多精彩机密、教程,尽在下方,赶紧点击了解吧~

    python源码、视频教程、插件安装教程、资料我都准备好了,直接在文末名片自取就可


    如果,我们给fun1,fun2,fun3,实现相同的功能呢?

    '''
    学习中遇到问题没人解答?小编创建了一个Python学习交流QQ群:261823976
    寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
    '''
    def func():
        print('嘻嘻哈哈')
    
    def timmer(f):
        start_time = time.time()
        time.sleep(0.1)
        f()
        end_time = time.time()
        print('----> 执行效率%s'%(end_time - start_time))
    
    f = func
    func = timmer
    func(f)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    但是,每次都需要将函数作为函数,传递给timmer(),而且这种方式已经破坏了原有的逻辑结构,之前的逻辑结构,是执行fun的同时,计算执行效率,但是现在是把fun传给第三方函数,进行计算。

    怎么解决这种问题呢,装饰器。

    装饰器就是:在不改动原函数代码前提下,增加额外的功能,装饰的返回值也是一个函数对象。

    '''
    学习中遇到问题没人解答?小编创建了一个Python学习交流QQ群:261823976
    寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
    '''
    def func():
         print('嘻嘻哈哈')
    
    
    def timmer(f):
        start_time = time.time()
        time.sleep(0.1)
        f()
        end_time = time.time()
        print('----> 执行效率%s'%(end_time - start_time))
        return timmer
    
    f = timmer(func)
    f()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    @语法糖 : 在定义函数的时候使用,避免再一次赋值操作。

    代码修改如下:

    def timmer(f):
        start_time = time.time()
        time.sleep(0.1)
        f()
        end_time = time.time()
        print('----> 执行效率%s'%(end_time - start_time))
        return timmer
    
    @timmer
    def func():
         print('嘻嘻哈哈')     
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    二、带参数的装饰器

    '''
    学习中遇到问题没人解答?小编创建了一个Python学习交流QQ群:261823976
    寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
    '''
    import time
    
    
    def wrapper(f):
        def inner(*args,**kwargs):
            start_time = time.time()
            time.sleep(0.1)
            f(*args,**kwargs)
            end_time = time.time()
            print('----> 执行效率%s' % (end_time - start_time))
        return inner
    
    @wrapper
    def fun(a):
        print("%s嘻嘻哈哈" %(a))
    
    @wrapper
    def fun1(a,b):
        print('%s嘻嘻哈哈,%s也跟着嘻嘻哈哈' %(a,b))
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

    三、带返回值的装饰器

    '''
    学习中遇到问题没人解答?小编创建了一个Python学习交流QQ群:261823976
    寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
    '''
    def wrapper(f):
        def inner(*args,**kwargs):
            start_time = time.time()
            time.sleep(0.1)
            ret = f(*args,**kwargs)
            end_time = time.time()
            print('----> 执行效率%s' % (end_time - start_time))
            return ret
        return inner
    
    @wrapper
    def fun(a):
        s = "%s嘻嘻哈哈" %(a)
        return s
    
    print(name)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    总结:

    就是 我们调用 fun() 方法,实现原来的功能,并且增加新的功能,前提不能修改源代码。

    尾语

    上面总结了 Python 调用 JS 的 4 种方式

    实际爬虫项目中,一般会先使用 node 命令进行一次测试,确保没问题后,

    再使用前 3 种方式的任意一种进行 Python 改写

    希望本篇文章有对你带来帮助 🎉,有学习到一点知识~

    最后,宣传一下呀~👇👇👇更多源码、资料、素材、解答、交流皆点击下方名片获取呀👇👇**

  • 相关阅读:
    推荐几个好用实用的免费图标素材(好看的icon)
    [RK3568 Android11] Binder驱动结构体
    淘宝/天猫优惠券查询接口 API 返回值说明
    缓存和数据库数据一致性解决方案
    Understanding the Users and Videos by Mining a Novel Danmu Dataset
    spark性能优化调优指导性文件
    Dubbo3基础使用
    Ubuntu20.04环境下Baxter机器人开发环境搭建
    【重拾C语言】四、循环程序设计典例整理(最大公因数、阶乘求和、正整数翻译、打印字符方阵、斐波那契数列……)
    Paste v4.1.2(Mac剪切板)
  • 原文地址:https://blog.csdn.net/m0_72282564/article/details/133886620