码迷,mamicode.com
首页 > 其他好文 > 详细

装饰器

时间:2019-07-16 00:34:04      阅读:132      评论:0      收藏:0      [点我收藏+]

标签:简单的   字符串   port   return   print   import   在线   作用   简单   

1."""
闭包函数
1.闭:定义在函数内部的函数
2.包:内部函数引用了外部函数作用域的名字
"""
2.装饰器简介
"""
装饰器:
器:就是一个工具
装饰:给被装饰对象添加新的功能

为什么要用装饰器
开放封闭原则:
开放:对扩展开放
封闭:对修改封闭

装饰器(可调用对象)必须遵循的两个原则:
1.不改变被装饰对象源代码
2.不改变被装饰对象(可调用对象)调用方式
def index():
pass
index()

如何用
"""
# import time
# print(time.time())
# 1562812014.731474 时间戳 当前时间距离1970-1-1 00:00:00相差的秒数
# 1970-1-1 00:00:00是Unix诞生元年


# time.sleep(3) # 让cpu谁三秒 让你的程序暂停三秒
# print(‘FBI warning!‘)


"""
1.统计index函数执行的时间
"""
import time


def index():
time.sleep(3)
print(‘澳门最大线上赌场开业啦 性感tank在线发牌!‘)


start = time.time()
index()
end = time.time()
print(‘index run time:%s‘ % (end - start))

3.一个简单的装饰器
import time


def index():
time.sleep(3)
print(‘澳门最大线上赌场开业啦 性感tank在线发牌!‘)
return ‘index‘


res1 = index()


def login(name):
time.sleep(1)
print(‘%s is sb‘ % name)
return ‘login‘


res = login(‘egon‘)


def outter(func): # func = 最原始的login函数的内存地址
def get_time(*args, **kwargs): # args = (‘egon‘,) kwargs = {}
start = time.time()
res = func(*args, **kwargs) # 最原始的login函数的内存地址() 直接调用 func(‘egon‘)
end = time.time()
print(‘func run time:%s‘ % (end - start))
return res

return get_time


# login = outter(login) # outter(最原始的login函数的内存地址)
# res = login(‘egon‘)
# print(res)
# index = outter(index)
# res1 = index()
# print(res1)
"""
函数参数的问题
无参函数和有参函数都可以直接调用???
函数可以接收任意数量的参数

"""
4.装饰器语法糖与修复
from functools import wraps # 导入修复模块
def outter(func):
@wraps(func) # 装饰器修复技术
def inner(*args,**kwargs):
"""
我是inner函数
:param args:
:param kwargs:
:return:
"""
print(‘执行被装饰函数之前 你可以执行的操作‘)
res = func(*args,**kwargs)
print(‘执行被装饰函数之后 你可以执行的操作‘)
return res
return inner

@outter # index = outter(最原始的index内存地址)
def index():
"""
这是index函数
:return:
"""
pass


print(index)
print(help(index)) # 查看函数的注释
print(index.__name__) # 查看函数名字符串形式
index()
"""
用户查看被装饰函数的函数名的时候查看到的就是被装饰函数本身
用户查看被装饰函数的注释的时候查看到的就是被装饰函数的注释
"""
5.多层装饰
def outter1(func1):
print(‘加载了outter1‘)
def wrapper1(*args,**kwargs):
print(‘执行了wrapper1‘)
res1=func1(*args,**kwargs)
return res1
return wrapper1
def outter2(func2):
print(‘加载了outter2‘)
def wrapper2(*args,**kwargs):
print(‘执行了wrapper2‘)
res2=func2(*args,**kwargs)
return res2
return wrapper2
def outter3(func3):
print(‘加载了outter3‘)
def wrapper3(*args,**kwargs):
print(‘执行了wrapper3‘)
res3=func3(*args,**kwargs)
return res3
return wrapper3
@outter1 # index = outter1(wapper2)
@outter2 # wrapper2 = outter2(wrapper3)
@outter3 # wrapper3 = outter3(最原始的index函数内存地址)
def index():
print(‘from index‘)

"""
加载了outter3
加载了outter2
加载了outter1

执行了wrapper1
执行了wrapper2
执行了wrapper3
from index
"""
index()

装饰器

标签:简单的   字符串   port   return   print   import   在线   作用   简单   

原文地址:https://www.cnblogs.com/night-rain/p/11192333.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!