本篇Pyhton编程实践教程将为大家讲解Pyhton编程的知识点,看完这篇文章会让你对Python编程的知识点有更加清晰的理解和运用。

作用:

在不改变函数源代码的前提下,给函数增加新的功能。

装饰器

1,本质上是一个函数

2,功能---装饰其他函数(为其他函数添加其他功能)

3,不能修改被装饰函数的源代码

4,不能修改被装饰函数的调用方式

实现装饰器的知识储备:

1,函数即“变量”

2,高阶函数

a,把一个函数当作实参,传给另外一个函数(在不修改被装饰函数源代码情况下,为其增加功能)

b,返回值包含函数名(不修改函数的调用方式)

例子:

def bar():
print("this is bar")
def test(func):
print("this is test")----看作是添加的新功能

return func--------------bar其实就是一个内存地址,加上()的时候就能调用。当把bar当作参数传给test的时候,返回的就是bar内存地址。

bar = test(bar)-------------这个操作就相当于:即给了bar一个内存地址使其加上()能调用,且能将test函数里的print内容展示出来

bar()

运行结果:

this is test

this is bar

3,嵌套函数

在函数内部def一个函数。

def test():
print("hahaha")
def bar():
print("bababa")
bar()
test()

运行结果:

hahaha

bababa

高阶函数+嵌套函数 =>装饰器

import time
def timer(func):
def dec(*args,**kwarge):#加上这两个,是预防被装饰的函数带有参数。
start_time = time.time()
func(*args,**kwarge)#加上这两个,是预防被装饰的函数带有参数。
end_time = time.time()
print("pro run time is %s"%(end_time-start_time))
return dec

@timer #等价于 test1 = timer(test1)。timer(test1)这个函数执行结果是返回了 dec的内存地址。-----高阶函数知识点:返回值包含函数名

#其实就是相当于把dec对应的那个内存空间再多加了一个名字“test1”

#而原先的test1的内存空间当作一个参数,传给了timer,并给了个名字func。-----高阶函数知识点:把函数当作实参,传给另外一个函数

def test1():
time.sleep(3)
print("this is test1")
def test2(name):
print("welecome %s"%name)
test1()#所以当执行到这一段的时候,其实是执行的dec(),然后接下来步骤就显而易见了。
test2()

装饰器自己也可以带参数

以上,关于Pyhton的全部内容讲解完毕啦,欢迎大家继续关注!更多关于Python的干货请关注职坐标Python频道!