您的位置:首页 > 编程语言 > Python开发

python 装饰器

2019-02-28 22:12 58 查看

1. 闭包函数概念:
函数内部定义的函数;引用了外部变量但非全局变量。

#示例
def count():
a = 1
b = 1
def sum():
c = 1
return a + c  # a - 自由变量
return sum

2. 高阶函数:
函数参数是一个函数,返回一个函数名函数参数是一个函数,返回一个函数名

def func1(x,y):
s=x+y
return s

def func2(func):

return 2*func

f1=func1(3,4)
f2=func2(f1)
print(f2)
#输出:
14

3. 装饰器:
装饰器的属性:
实质: 是一个函数
参数:是你要装饰的函数名(并非函数调用)
返回:是装饰完的函数名(也非函数调用)
作用:为已经存在的对象添加额外的功能
特点:不需要对对象做任何的代码上的变动,函数调用方式不被修改
即:在不改变原函数代码和调用方式的基础上,添加新的功能

实例:利用装饰器为函数增加计时功能

#利用装饰器为函数增加计时功能
import time
#新建一个装饰器decorator,func为待装饰的函数
def decorator(func):
def newfunc():#定义装饰函数
print('此处添加执行func之前的功能,例如:')
print('func函数开始执行时间:',time.ctime())
func()
print('此处添加执行func之后的功能')
print('func函数结束执行时间:',time.ctime())

return newfunc #返回装饰函数

def myfunc():
print('这是需要被装饰的函数')
time.sleep(3)

print('装饰前')
myfunc()
print('')
print('装饰中....')
myfunc=decorator(myfunc)
print('')
print('装饰后')
myfunc()

#输出:
装饰前
这是需要被装饰的函数

装饰中....

装饰后
此处添加执行func之前的功能,例如:
func函数开始执行时间: Thu Feb 28 22:05:48 2019
这是需要被装饰的函数
此处添加执行func之后的功能
func函数结束执行时间: Thu Feb 28 22:05:51 2019

装饰器语法糖:
在需要被装饰的函数上加@decorator_name,可以省略调用decorator 和newfunc函数,直接调用func函数计划科获得被装饰后的函数

#利用装饰器为函数增加计时功能
import time
#新建一个装饰器decorator,func为待装饰的函数
def decorator(func):
def newfunc():#定义装饰函数
print('此处添加执行func之前的功能,例如:')
print('func函数开始执行时间:',time.ctime())
func()
print('此处添加执行func之后的功能')
print('func函数结束执行时间:',time.ctime())

return newfunc #返回装饰函数

@decorator
def myfunc():
print('这是需要被装饰的函数')
time.sleep(3)

myfunc()
#输出
此处添加执行func之前的功能,例如:
func函数开始执行时间: Thu Feb 28 22:09:57 2019
这是需要被装饰的函数
此处添加执行func之后的功能
func函数结束执行时间: Thu Feb 28 22:10:00 2019
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: