# 装饰器,对一个函数打扮

# def foo():
# print("foo")
# foo
# foo()
# def test1():
# print('-----1-----')
# def test1():
# print('-----2-----')
# test1()

# 需求来了

# 开放封闭规则
# 封闭:以实现的功能代码块
# 开放:对扩展开放

# 语法糖
# def w1(func):
  # def inner():
    # # 验证1
    # # 验证2
    # # 验证3
    # func()
  # return inner

# @w1
# def f1():
  # print('1111111')

# @w1
# def f2():
  # print('2222222')

# @w1
# def f3():
  # print('3333333')

def w1(func):
  def inner():
    print("----正在验证权限-----")
    func()
  return inner

def f1():
  print('------f1--------')

def f2():
  print('------f2--------')

# innerFunc = w1(f1)
# innerFunc()

# innerFunc = w1(f2)
# innerFunc()

f1 = w1(f1)
f1()

# 2----------
# def w1(func):
  # def inner():
    # print("----正在验证权限-----")
    # if False:
      # func()
    # else:
      # print("没有权限")
  # return inner

# @w1 # f1 = w1(f1)
# def f1():
  # print('------f1--------')

# @w1
# def f2():
  # print('------f2--------')

# f1()
# print('---------------------')
# f2()

# 再议装饰器
# def makeBold(fn):
# def wrapped():
# print('---------1-------------')
# return "<b>"+ fn() +"</b>"
# return wrapped

# def makeTtalic(fn):
# def wrapped():
# print('---------2-------------')
# return "<i>"+ fn() +"</i>"
# return wrapped

# # 装饰器从下往上装,调用从上往下调用
# @makeBold
# @makeTtalic
# def test3():
# print('---------3-------------')
# return 'hello world-3'

# ret = test3()
# # ---------1-------------
# # ---------2-------------
# # ---------3-------------

# print(ret)
# # ---------1-------------
# # ---------2-------------
# # ---------3-------------
# # <b><i>hello world-3</i></b>

# 装饰器什么时候进行装饰
def w1(func):
  print("--正在装饰1-----")
  def inner():
    print("----正在验证权限1-----")
    func()
  return inner

def w2(func):
  print("--正在装饰2-----")
  def inner():
    print("----正在验证权限2-----")
    func()
  return inner

# 只要python解释器执行到了这个代码,那么就会自动的进行装饰,而不是等调用的时才装时的
@w1
@w2
def f1():
  print('------f1--------')

# --正在装饰-----

# 再调用之前已经装饰好了
f1()

# --正在装饰2-----
# --正在装饰1-----
# ----正在验证权限1-----
# ----正在验证权限2-----
# ------f1--------

最新文章

  1. python之ATM
  2. 如何使用laravel搭建后台登录系统
  3. [No00001C]不想背单词患者的福音!-快来定制你的个性词包-不想记、记不牢,这可怎么办?
  4. MEF搜索范围
  5. js 为label标签和div标签赋值
  6. GO语言练习:第二个工程--模拟音乐播放器
  7. linux 平均负载 load average 的含义
  8. HTML5自学笔记[ 9 ]HTML5实现元素的拖放
  9. 二.JSP开发过程中遇到的问题及解决
  10. SPCircleView的使用(圆心向四周扩散动画)
  11. Wincc flexable的IO域组态
  12. [知了堂学习笔记]_css3特效第二篇--行走的线条&amp;&amp;置顶导航栏
  13. 【原创】运维基础之yum离线环境安装软件
  14. mysql实现开窗函数
  15. python练习册0006
  16. react如何引入外部文件的整理
  17. [转]使用PHPExcel判别和格式化Excel中的日期格式
  18. 得到scp命令的完整路径
  19. Eclipse修改已存在的SVN地址
  20. Frequently Asked Questions

热门文章

  1. nginx基础命令
  2. Python笔记 【无序】 【二】
  3. 【转】Python标准模块--importlib
  4. Django:前后端分离后联调给前端传数据
  5. HTTP协议02-请求和响应的报文构成
  6. less个人学习笔记
  7. Maven中央仓库地址整理
  8. jq获取页面url后边带的参数
  9. (转)scikit-learn主要模块和基本使用方法
  10. Confluence 6 修改 Home 目录的位置