• 首页
  • 产品与方案
  • 众成服务
  • 走进众成
  • 新闻中心
  • 企业文化
  • 联系我们
  • 解决方案
  • 众成软件
  • 维护支持
  • 运维服务
  • 技术交流
  • 公司介绍
  • 荣誉资质
  • 合作伙伴
  • 招贤纳士
  • 公司新闻
  • 业界动态
  • 文化建设
  • 企业文化
  • 荣誉榜

首页 > 众成服务 > 技术交流

技术交流

关于对python装饰器了解

 作者:众成   文章来源:运维部    点击数:  更新时间:2018-10-25 14:44:18

装饰器作为python的中的一个功能可以说是非常重要的,也是学习python中的一个门坎,可能很多人会觉得在学习装饰器的时候很容易会搞迷糊,最在看python核心编程时和python之阐时感觉有点明白了,在此抛砖引玉。

装饰器的作用最大的特点的是,在不修改原代码的情况下,给原有的代码附加功能,所以要写装饰器要遵守二个规则:

1.   不能修改被装饰的函数

2.   不能修改函数的调用方式

想要搞明白装饰器需要的知识点

1.函数的作用域
2.闭包
3.高阶函数
4.嵌套函数

代码如下:

def fun(name):

     def wapper():

print("the test fun is %s"  %name)

return wapper

a = fun(test) #.wapper at 0x0000000002103840>

type(a) #

这里可以看的出来fun(test)是一个函数的内存地址,程序给出了一个函数类型,由此代码也可以看得出一个结论,就是函数既变量的一个方法,那么这样的话,就可以很好的理解装饰的工作形式了,

代码如下:

import time

def timer(fun):

def wapper(*args,**kwargs):

    start_time = time.time()

    fun()

    stop_time = time.time()

    func_time = stop_time - start_time

    print('the fun run time is %s' %func_time)

return wapper

def test1():

time.sleep(3)

print('the fun1 is test1')

test1= timer(test1)

print(test1) #.wapper at 0x00000000025B0488>

test1()

> the fun1 is test1
>the fun run time is 3.0052061080932617

这里已经实现了我们写装饰器的所要达到的各要求,并且实现也原代码函数要附加的功能,但是真正的python中已经为我们考虑到如 test1 = timer(test1)的繁琐操作,python中用@代替我们所做的操作,让代码看起来更加的优雅简洁所以正确的代码应该是这样的

import time

def timer(fun):

def wapper(*args,**kwargs):

    start_time = time.time()

    fun()

    stop_time = time.time()

    func_time = stop_time - start_time

    print('the fun run time is %s' %func_time)

return wapper

@timer

def test1():

time.sleep(3)

print('the fun1 is test1')

test1()

@timer

def test2(name,age):

    print("test2", %(name,age))

test2('chen','22)

 

下载此文档:关于对python装饰器了解(陈诚)   类型:doc,   大小:32 KB
  • 地址:温州市车站大道大诚商厦E幢四楼 | 电话:0577-88891333 | 技术服务电话:4008515159 | 传真:0577-88363999
  • 邮箱:jucher@jucher.com | 浙ICP备05000620号-1
  • Copyright © 2009-2019 JUCHER CORPORATION CO., LTD All Rights Reserve