包含python装饰器原函数的词条( 四 )


注意 , 这里 count 装饰函数中的2个 return .
运行下,应该会出现3次:
现在多做一步 探索,我们来打印下下面例子中的hello()函数的元信息:
输出:
这说明了,它不再是以前的那个hello()函数,而是被wrapper()函数取代了 。
如果我们需要用到元函数信息 , 那怎么保留它呢?这时候可以用内置装饰器 @functools.wrap。
运行下:
好记性不如烂笔头 , 写一下理解一下会好很多 。
下面还分享类的装饰器,以及装饰器所用场景 。
请教:python装饰器如何不改变原函数名装饰器是用在函数不修改添加新功能的情况下诞生的,一般在需要装饰的函数上写
@funcname
def funb(){
.....
}
然后再装饰的函数里面去调用原函数,以达到不修改添加功能的作用
python装饰器是什么意思装饰器是程序开发中经常会用到的一个功能,用好了装饰器,开发效率如虎添翼,所以这也是Python面试中必问的问题,但对于好多小白来讲 , 这个功能 有点绕 , 自学时直接绕过去了,然后面试问到了就挂了,因为装饰器是程序开发的基础知识,这个都 不会,别跟人家说你会Python, 看了下面的文章,保证你学会装饰器 。
1、先明白这段代码
#### 第一波 ####
def foo():
print 'foo'
foo#表示是函数
foo()#表示执行foo函数
#### 第二波 ####
def foo():
print 'foo'
foo = lambda x: x + 1
foo()# 执行下面的lambda表达式,而不再是原来的foo函数,因为函数 foo 被重新定义了
2、需求来了
初创公司有N个业务部门,1个基础平台部门,基础平台负责提供底层的功能,如:数据库操作、redis调用、监控API等功能 。业务部门使用基础功能时,只需调用基础平台提供的功能即可 。如下:
############### 基础平台提供的功能如下 ###############
def f1():
print 'f1'
def f2():
print 'f2'
def f3():
print 'f3'
def f4():
print 'f4'
############### 业务部门A 调用基础平台提供的功能 ###############
f1()
f2()
f3()
f4()
############### 业务部门B 调用基础平台提供的功能 ###############
f1()
f2()
f3()
f4()
目前公司有条不紊的进行着,但是,以前基础平台的开发人员在写代码时候没有关注验证相关的问题,即:基础平台的提供的功能可以被任何人使用 。现在需要对基础平台的所有功能进行重构,为平台提供的所有功能添加验证机制,即:执行功能前,先进行验证 。
老大把工作交给 Low B,他是这么做的:
跟每个业务部门交涉,每个业务部门自己写代码,调用基础平台的功能之前先验证 。诶,这样一来基础平台就不需要做任何修改了 。
当天Low B 被开除了…
老大把工作交给 Low BB , 他是这么做的:
############### 基础平台提供的功能如下 ###############
def f1():
# 验证1
# 验证2
# 验证3
print 'f1'
def f2():
# 验证1
# 验证2
# 验证3
print 'f2'
def f3():
# 验证1
# 验证2
# 验证3
print 'f3'
def f4():
# 验证1
# 验证2
# 验证3
print 'f4'
############### 业务部门不变 ###############
### 业务部门A 调用基础平台提供的功能###
f1()
f2()
f3()
f4()
### 业务部门B 调用基础平台提供的功能 ###
f1()
f2()
f3()
f4()
过了一周 Low BB 被开除了…
老大把工作交给 Low BBB,他是这么做的:

推荐阅读