# def wrapper(f):#     def inner(*args,**kwargs):#         print('在被装饰的函数执行之前做的事')#         res = f(*args,**kwargs)#         print('在被装饰的函数执行之后做的事')#         return res#     return inner# @wrapper            # holiday = wrapper(holiday)    这时holiday == inner# def holiday(day):#     print('全体放假%s天'%day)#     return '好开心'# ret = holiday(3)# print(ret)

# def outer(*args,**kwargs):#     print(args,kwargs)#     print(*args)#     def inner(*args):#         print('inner:', args)#     inner(*args)# outer(1,2,3,4,a = 1,b = 2)

# def wahaha():#     '''#     一个打印娃哈哈的函数#     :return:#     '''#     print('娃哈哈')# print(wahaha.__name__)  # 查看字符串格式的函数名# print(wahaha.__doc__)   # document (查看函数的注释)

# from functools import wraps# def wrapper(f):     # f = holiday#     @wraps(f)                               # 加上这句话之后, holiday 就是holiday 不是inner了#     def inner(*args,**kwargs):#         print('在被装饰的函数执行之前做的事')#         res = f(*args,**kwargs)#         print('在被装饰的函数执行之后做的事')#         return res#     return inner# @wrapper            # holiday = wrapper(holiday)    这时holiday == inner  ,这时还没加上面那句话# def holiday(day):#     print('全体放假%s天'%day)#     return '好开心'# ret = holiday(3)# print(holiday.__name__)     # 输出inner,加了上面那句话之后输出 holiday

# ---------------------------------------------------------------------------------------------------- #

# 带参数的装饰器

# 500个函数## import time# FLAG = True# def timmer_out(flag):#     '''#     计算机函数执行时间#     :param flag:flag为真时,运行这个函数,为假时不运行#     :return:#     '''#     def timmer(func):#         def inner(*args,**kwargs):#             if FLAG:#                 start_time = time.time()#                 ret = func(*args,**kwargs)#                 end_time = time.time()#                 print(end_time - start_time)#                 return ret#             else:#                 ret = func(*args, **kwargs)#                 return ret#         return inner#     return timmer# @timmer_out(FLAG)           # 先调用timmer_out(FLAG),返回的结果为timmer, 加了@ 之后就等于 @timmer,就等于wahaha = timmer(wahaha)# # 上个式子等价于:# # timmer = timmer_out(FLAG)# #@timmer## def wahaha():#     time.sleep(0.1)#     print('娃哈哈')# @timmer_out(FLAG)# def erguotou():#     time.sleep(0.1)#     print('二锅头')# wahaha()# erguotou()

# 多个装饰器装饰一个函数

## def wrapper1(func):     # func --> f#     def inner1():#         print('wrapper1,before func')#         func()      # f#         print('wrapper1,after func')#     return inner1## def wrapper2(func):     # func --> inner1#     def inner2():#         print('wrapper2, before func')#         func()      # 其实是 inner1()#         print('wrapper2, after func')#     return inner2## @wrapper2   # f = wrapper2(f) --> wrapper2(inner1), 返回的inner2,故 f == inner2# @wrapper1   # f = wrapper1(f) 返回的inner1,故 f == inner1## # 先找最近的函数,wrapper2没找到, wrapper1先找的f(),然后wrapper2又找的# def f():#     print('in f')## f() # --> inner2()

# ---------------------------------------------------------------------------------- ## 三个

def wrapper1(func):    def inner1():        print('wrapper1,before func')        ret = func()        print('wrapper1,after func')        return ret    return inner1

def wrapper2(func):    def inner2():        print('wrapper2, before func')        ret = func()        print('wrapper2, after func')        return ret    return inner2

def wrapper3(func):    def inner3():        print('wrapper3, before func')        ret = func()        print('wrapper3, after func')        return ret    return inner3

@wrapper3@wrapper2@wrapper1def f():    print('in f')    return '哈哈哈'print(f())

# 记录用户的登录情况 and 计算这个函数的执行时间

转载于:https://www.cnblogs.com/BlameKidd/p/9292042.html

python学习之老男孩python全栈第九期_day012知识点总结相关推荐

  1. python学习之老男孩python全栈第九期_day019知识点总结——collections模块、时间模块、random模块、os模块、sys模块...

    一. collections模块 在内置数据类型(dict.list.set.tuple)的基础上,collections模块还提供了几个额外的数据类型:namedtuple.deque.Counte ...

  2. python学习之老男孩python全栈第九期_day024知识点总结——单继承、多继承

    一. 单继承 class A:pass # 父类,也叫基类,也叫超类 class B:pass # 父类,也叫基类,也叫超类 class AB_son(A,B):pass # 子类,也叫派生类 cla ...

  3. 老男孩python第14期_python学习之老男孩python全栈第九期_day014知识点总结

    # 迭代器和生成器 # 迭代器 # 双下方法:很少直接调用的方法,一般情况下,是通过其他语法触发的 # 可迭代的 --> 可迭代协议:含有__iter__的方法( '__iter__' in d ...

  4. python学习之老男孩python全栈第九期_day004知识点总结

    1. 列表list: 列表转换成字符串: s = 'kidd' s1 = '_'.join(s) # 用_连接 字符串转换成列表: split() range(头,尾,步长): [0,1,2,3,4, ...

  5. 老男孩python第九期_python学习之老男孩python全栈第九期_day004知识点总结

    1. 列表list: 列表转换成字符串: s = 'kidd' s1 = '_'.join(s) # 用_连接 字符串转换成列表: split() range(头,尾,步长):[0,1,2,3,4,5 ...

  6. python全栈第21期_2019 Python最新基础入门(全栈21期)

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 2019 Python最新基础入门(全栈21期) 01s21开班仪式 开班入学必听Alex大神讲行业前景1 .mp4 开班入学必听Alex大神讲行业前景2 ...

  7. python学习之老男孩python全栈第九期_day002作业

    1. 判断下列逻辑语句的True,False. (1) 1 > 1 or 3 < 4 or 4 > 5 and 2 > 1 and 9 > 8 or 7 < 6 T ...

  8. python学习之老男孩python全栈第九期_day017作业

    1. 三级菜单的代码看一遍 2. 斐波那契数列用递归实现:问第n个斐波那契数是多少 1 def fbnq(n): 2 if n == 0 or n == 1: 3 return 1 4 else: 5 ...

  9. python学习之老男孩python全栈第九期_数据库day004 -- 作业

    https://www.cnblogs.com/YD2018/p/9451809.html 11. 查询学过"001"并且也学过编号"002"课程的同学的学号. ...

  10. python学习之老男孩python全栈第九期_day009之初始函数初窥

    '''# len# 计算字符串的长度# s = '金老板小护士'# len(s)# 不能用 len 怎么办#low一点的方法# count = 0# for i in s:# count += 1# ...

最新文章

  1. mysql 主从复制 position_mysql 主从复制原理及步骤。
  2. PHP 发邮件《转》
  3. 采集gpu_GPU温度的采集
  4. 《Java安全编码标准》一导读
  5. iptables快速记忆总结
  6. matlab晶格图,科学网-MATLAB软件绘制一维双原子晶格的格波色散曲线-李金磊的博文...
  7. 多人远程同时使用谷歌浏览器
  8. 笔记本电脑已连接WIFI密码查看方法
  9. C++11新特性——总结
  10. 往事如烟 - 辉哥的财务自由
  11. 【小程序“600002“】现象:小程序测试版能正常的进行页面跳转,正式版不能进行页面跳转
  12. linux网络之怪现象一--接网线启动网络不通,不接网线启动再插线网络通
  13. u盘 linux 装系统 suse,从u盘启动安装opensuse 11.4 livecd
  14. 人工智能之父马文・明斯基
  15. java时钟代码_一个经典的JAVA APPLET时钟程序(一)
  16. CMake中find_package的学习
  17. 查看SQL查询数据所话费时间
  18. 2018年财富中国500强:东方明珠蝉联登榜 领跑文化传媒业
  19. 当前你所在的服务器更新维护尚未完成,我们将于01月16日09:00-13:00对所有服务器进行更...
  20. MATLAB里出现一大段橙色的字,出现这样的警告问题在哪呢

热门文章

  1. 微软打碎了周鸿祎的如意算盘
  2. 微信小程序微商城(七):动态API实现商品分类
  3. TP 打开 显示错误信息
  4. TeaVM辛辛苦苦编译出的wasm,浏览器中不能跑
  5. 原因及解决办法:error while loading shared libraries: libgtk-x11-2.0.so.0: cannot open shared object file
  6. 管理:权力是用来完成责任的
  7. C++中map的遍历的代码
  8. 管理感悟:承认错误,善于总结
  9. 量子纠缠可能是真实存在
  10. HTML弹窗上下一步,JS实现从网页顶部掉下弹出层效果的方法