网创优客建站品牌官网
为成都网站建设公司企业提供高品质网站建设
热线:028-86922220
成都专业网站建设公司

定制建站费用3500元

符合中小企业对网站设计、功能常规化式的企业展示型网站建设

成都品牌网站建设

品牌网站建设费用6000元

本套餐主要针对企业品牌型网站、中高端设计、前端互动体验...

成都商城网站建设

商城网站建设费用8000元

商城网站建设因基本功能的需求不同费用上面也有很大的差别...

成都微信网站建设

手机微信网站建站3000元

手机微信网站开发、微信官网、微信商城网站...

建站知识

当前位置:首页 > 建站知识

Python函数系列之装饰器(三)

在Python中,装饰器的本质就是Python中的一个函数,其来源自Python面向对象。装饰器是在函数调用之上的修饰。这些修饰仅是当声明一个函数或方法的时候,才会被应用额外的调用。有点类似Java中的AOP(面向方面编程)。同时在设计模式中,还有装饰器模式,也即是:装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构。原则是:不修改被修饰函数的源代码,不修改被修饰函数的调用方式。

创新互联是创新、创意、研发型一体的综合型网站建设公司,自成立以来公司不断探索创新,始终坚持为客户提供满意周到的服务,在本地打下了良好的口碑,在过去的十余年时间我们累计服务了上千家以及全国政企客户,如广告制作等企业单位,完善的项目管理流程,严格把控项目进度与质量监控加上过硬的技术实力获得客户的一致称誉。

装饰器的用途:

  • 引入日志

  • 增加计时逻辑来检测性能

  • 给函数加入事务的能力

  • 权限校验

  • 缓存

  • 执行函数前/后的预备或清理功能等

例子:

# -*- coding: utf-8 -*-

import time

def deco(func): #func = test1或test2
    def wrapper():
        start_time = time.time();
        func(); #就是运行 test1()或者test2()函数
        end_time = time.time();
        print("此模块运行时间为:%s" %(end_time - start_time));
    return wrapper;

def test1():
    time.sleep(3);
    print("函数Test1运行结束");


def test2():
    time.sleep(3);
    print("函数Test2运行结束")

#在没用使用装饰器调用时,如下调用
test1 = deco(test1) #返回的wrapper函数地址
test1() #执行的wrapper()

test2 = deco(test2)
test2()

#若上面函数有上百上千个,都是那样调用,都是重复的代码调用,在Python中,使用@语法糖

#例如下面定义一个test3函数
@deco  #就相等于 test3 = deco(test3)
def test3():
    time.sleep(3);
    print("函数Test-3运行结束");
test3()

运行结果如下:

函数Test1运行结束

此模块运行时间为:3.000406265258789

函数Test2运行结束

此模块运行时间为:3.000087261199951

函数Test-3运行结束

此模块运行时间为:3.000718355178833

Process finished with exit code 0

装饰器的语法以@开头,接着是装饰器函数的名字和可选的参数。紧跟着装饰器声明的是被修饰的函数和装饰函数的可选参数。

例如如下:

@decorator(dec_opt_args)

def func(func_opt_args):

  ......


网站名称:Python函数系列之装饰器(三)
文章位置:http://bjjierui.cn/article/iggpij.html

其他资讯