import time
def timmer(func): #func=testdef wrapper():start_time=time.time()res=func() #就是在运行test()stop_time = time.time()print('运行时间是%s' %(stop_time-start_time))return resreturn wrapper@timmer #test=timmer(test)
def test():time.sleep(3)print('test函数运行完毕')return '这是test的返回值'res=test()  #就是在运行wrapper
print(res)
import time
def timmer(func): #func=test1def wrapper(*args,**kwargs): #test('linhaifeng',age=18)  args=('linhaifeng')  kwargs={'age':18}start_time=time.time()res=func(*args,**kwargs) #就是在运行test()         func(*('linhaifeng'),**{'age':18})stop_time = time.time()print('运行时间是%s' %(stop_time-start_time))return resreturn wrapper# @timmer #test=timmer(test)
def test(name,age):time.sleep(3)print('test函数运行完毕,名字是【%s】 年龄是【%s】' %(name,age))return '这是test的返回值'@timmer
def test1(name,age,gender):time.sleep(1)print('test1函数运行完毕,名字是【%s】 年龄是【%s】 性别【%s】' %(name,age,gender))return '这是test的返回值'# res=test('linhaifeng',age=18)  #就是在运行wrapper
# # print(res)
# test1('alex',18,'male')test1('alex',18,'male')# def test2(name,age,gender): #test2(*('alex',18,'male','x','y'),**{})
#     #name,age,gender=('alex',18,'male','x','y')
#     print(name)
#     print(age)
#     print(gender)
#
# def test1(*args,**kwargs):
#     test2(*args,**kwargs)  #args=('alex',18,'male','x','y') kwargs={}
#
# # test2('alex',18,gender='male')
#
# test1('alex',18,'male')
user_list=[{'name':'alex','passwd':'123'},{'name':'linhaifeng','passwd':'123'},{'name':'wupeiqi','passwd':'123'},{'name':'yuanhao','passwd':'123'},
]
current_dic={'username':None,'login':False}def auth(auth_type='filedb'):def auth_func(func):def wrapper(*args,**kwargs):print('认证类型是',auth_type)if auth_type == 'filedb':if current_dic['username'] and current_dic['login']:res = func(*args, **kwargs)return resusername=input('用户名:').strip()passwd=input('密码:').strip()for user_dic in user_list:if username == user_dic['name'] and passwd == user_dic['passwd']:current_dic['username']=usernamecurrent_dic['login']=Trueres = func(*args, **kwargs)return reselse:print('用户名或者密码错误')elif auth_type == 'ldap':print('鬼才特么会玩')res = func(*args, **kwargs)return reselse:print('鬼才知道你用的什么认证方式')res = func(*args, **kwargs)return resreturn wrapperreturn auth_func@auth(auth_type='filedb') #auth_func=auth(auth_type='filedb')-->@auth_func 附加了一个auth_type  --->index=auth_func(index)
def index():print('欢迎来到京东主页')@auth(auth_type='ldap')
def home(name):print('欢迎回家%s' %name)
#
@auth(auth_type='sssssss')
def shopping_car(name):print('%s的购物车里有[%s,%s,%s]' %(name,'奶茶','妹妹','娃娃'))# print('before-->',current_dic)
# index()
# print('after--->',current_dic)
# home('产品经理')
shopping_car('产品经理')

装饰器预演

import time
def timmer(func):def wrapper(*args,**kwargs):start_time=time.time()res=func(*args,**kwargs)stop_time = time.time()print('函数运行时间是%s' %(stop_time-start_time))return resreturn wrapper@timmer
def cal(l):res=0for i in l:time.sleep(0.1)res+=ireturn resres=cal(range(20))
print(res)

装饰器

import time
def cal(l):start_time=time.time()res=0for i in l:time.sleep(0.1)res+=istop_time = time.time()print('函数的运行时间是%s' %(stop_time-start_time))return resprint(cal(range(100)))def index():passdef home():pass

装饰器实现

import time
def timmer(func): #func=testdef wrapper():# print(func)start_time=time.time()func() #就是在运行test()stop_time = time.time()print('运行时间是%s' %(stop_time-start_time))return wrapper@timmer #test=timmer(test)
def test():time.sleep(3)print('test函数运行完毕')
test()# res=timmer(test)  #返回的是wrapper的地址
# res()  #执行的是wrapper()# test=timmer(test)  #返回的是wrapper的地址
# test()  #执行的是wrapper()#  @timmer  就相当于 test=timmer(test)

生成器相关的yield

# age=10
# res=True if age > 10 else False
#
# l=['a' for i in range(10)]
# g_l=('a' for i in range(10))def test():for i in range(4):yield i
t=test()# for i in t:
#     print(i)
#
# t1=(i for i in t)
# print(list(t1))# t1=(i for i in t)
# t2=(i for i in t1) #这里为空 因为生成器一次就完蛋了 他并会保存里面的值
# print(list(t1))
# print(list(t2))

python 装饰器相关 从后往前看相关推荐

  1. python装饰器函数执行后日志_python 装饰器理解

    在理解装饰器之前,先应该对闭包有个概念:所谓闭包,就是将组成函数的语句和这些语句的执行环境打包在一起时得到的对象,它的主要作用是封存上下文.这一特性可以巧妙的被用于现有函数的包装,从而为现有函数添加功 ...

  2. python装饰器函数执行后日志_python 某一函数上面有多个装饰器

    python 某一函数上面有多个装饰器 首先十分不推荐这种做法, 会令程序难以维护. 其次, 多个装饰器是按照装饰器的顺序进行执行的. 如果你编写过装饰器, 你就应该知道, 其实装饰器就是把函数的名字 ...

  3. python装饰器函数执行后日志_Python装饰器使用规范案例详解

    >>> def now(): ... print('2015-3-25') ... >>> f = now >>> f() 2015-3-25 函 ...

  4. python装饰器函数执行后日志_一篇文章搞懂Python装饰器所有用法

    如果你接触 Python 有一段时间了的话,想必你对 @ 符号一定不陌生了,没错 @ 符号就是装饰器的语法糖. 它放在一个函数开始定义的地方,它就像一顶帽子一样戴在这个函数的头上.和这个函数绑定在一起 ...

  5. python装饰器函数执行后日志_python使用装饰器作日志处理的方法

    装饰器这东西我看了一会儿才明白,在函数外面套了一层函数,感觉和java里的aop功能很像:写了2个装饰器日志的例子, 第一个是不带参数的装饰器用法示例,功能相当于给函数包了层异常处理,第二个是带参数的 ...

  6. python装饰器函数执行后日志_Python装饰器记录日志、异常处理、函数添加,python,处理函数,功能...

    为什么需要使用装饰器? 举一个简单的例子: 当你需要记录一个函数整个处理过程的时间,你会怎么做?最简单直观的方法,当然是在函数开始跟结束的地方记录时间.代码如下: import time def ac ...

  7. python装饰器函数后执行_Python装饰器限制函数运行时间超时则退出执行

    实际项目中会涉及到需要对有些函数的响应时间做一些限制,如果超时就退出函数的执行,停止等待. 可以利用python中的装饰器实现对函数执行时间的控制. python装饰器简单来说可以在不改变某个函数内部 ...

  8. python装饰器原理wraps(method)(self)_python装饰器中@wraps作用--修复被装饰后的函数名等属性的改变...

    Python装饰器(decorator)在实现的时候,被装饰后的函数其实已经是另外一个函数了(函数名等函数属性会发生改变),为了不影响,Python的functools包中提供了一个叫wraps的de ...

  9. python装饰器与闭包_Python 装饰器和闭包

    Python 装饰器和闭包 装饰器是 Python 中常见的语法糖,这篇文章讲了闭包和装饰器的原理,并且分析了函数中变量的作用域,以及尝试总结了常见的坑. 装饰器基础 首先来看看装饰器的定义:装饰器本 ...

最新文章

  1. 直接插入排序、希尔排序
  2. iOS进阶之atomic一定是线程安全的吗(10)
  3. python入门基础代码图-python入门基础知识(代码)
  4. Java中的参数传递 --Java
  5. Eclipse上安装springsource-tool-suite
  6. Cisco asa 5520 oid
  7. python中字符串相乘结果_LeetCode 43. 字符串相乘 | Python
  8. Python找出列表的中只出现一次的元素
  9. GAN生成的人脸数据集
  10. 最速下降法及案例分析(含MATLAB代码)
  11. 手动实现直方图匹配(python)
  12. 人工智能资料下载地址分享
  13. 秦小明金融 第五讲 财务模型的搭建与分析
  14. vue项目AES密码加密解密
  15. Android开发之智能聊天机器人
  16. 抓包工具charles实践分享
  17. java初步语法(一)数据类型
  18. 中国大学 MOOC Android 性能优化:冷启动优化总结
  19. nginx服务器缓存文件清理,清除nginx缓存文件并不总是有效
  20. 4种大文件传输工具和软件,用于共享大文件

热门文章

  1. 花书+吴恩达深度学习(三)反向传播算法 Back Propagation
  2. 机器学习-吴恩达-笔记-9-聚类
  3. 《图解HTTP》-读
  4. 浮动和清除(闭合)浮动
  5. Android自定义view之ViewPager指示器——2
  6. java的printf语法_Java中printf的用法总结
  7. python和anaconda区别_Pycharm、Anaconda到底是什么?有什么区别?
  8. java元类_元类 - 一心不乱 - 博客园
  9. 执行 npm install -g @vue/cli 报错
  10. 前端拦截url参数xss攻击_闲庭信步聊前端 - 漫谈XSS