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

前言

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

Python基础教程:装饰器的详细教程_第1张图片

一、什么是装饰器

目的:给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))

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

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)

但是,每次都需要将函数作为函数,传递给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()

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

代码修改如下:

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('嘻嘻哈哈')     

二、带参数的装饰器

'''
学习中遇到问题没人解答?小编创建了一个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))

三、带返回值的装饰器

'''
学习中遇到问题没人解答?小编创建了一个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)

总结:

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

尾语

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

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

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

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

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

你可能感兴趣的:(python,python,服务器,linux,开发语言,pycharm)