标签:完成 ima print 自动 color return python hello alt
def test1(): print(‘---a‘) def test1(): print(‘---2‘) t =test1() ### 运行结果 ---2
1)版本1:实现验证
def w1(): print(‘---正在验证权限‘) f1() def f1(): print(‘---f1‘) w1() ### 运行结果 ---正在验证权限 ---f1
2)版本2:闭包
def w1(func): def inner(): print(‘---正在验证权限‘) func() return inner def f1(): print(‘---f1‘) def f2(): print(‘---f2‘) innerFunct = w1(f1) innerFunct()
---正在验证权限
---f1
3)版本3:函数名换成f1()
def w1(func): def inner(): print(‘---正在验证权限‘) func() return inner def f1(): print(‘---f1‘) def f2(): print(‘---f2‘) f1 = w1(f1) f1()
def w1(func): def inner(): print(‘---正在验证权限‘) func() return inner @w1 #相当于 f1 = w1(f1) def f1(): print(‘---f1‘) @w1 def f2(): print(‘---f2‘) #f1 = w1(f1) f1()
---正在验证权限
---f1
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 = w1(f1) f1()
python解释器就会从上到下解释代码,步骤如下:
没错, 从表面上看解释器仅仅会解释这两句代码,因为函数在 没有被调用之前其内部代码不会被执行。
从表面上看解释器着实会执行这两句,但是 @w1 这一句代码里却有大文章, @函数名 是python的一种语法糖。
#定义函数:完成包裹数据 def makeBold(fn): def wrapped(): return "<b>" + fn() + "</b>" return wrapped #定义函数:完成包裹数据 def makeItalic(fn): def wrapped(): return "<i>" + fn() + "</i>" return wrapped @makeBold @makeItalic def test2(): return "hello world-2" print(test2())
<b><i>hello world-2</i></b>
1)分析
#定义函数:完成包裹数据 def makeBold(fn): def wrapped(): print(‘----1‘) return "<b>" + fn() + "</b>" return wrapped #定义函数:完成包裹数据 def makeItalic(fn): def wrapped(): print(‘----2‘) return "<i>" + fn() + "</i>" return wrapped @makeBold @makeItalic def test2(): print(‘----3‘) return "hello world-2" print(test2())
----1 ----2 ----3 <b><i>hello world-2</i></b>
def w1(func): print("---正在装饰1----") def inner(): print("---正在验证权限1----") func() return inner #只要python解释器执行到了这个代码,那么就会自动的进行装饰,而不是等到调用的时候才装饰的 @w1 def f1(): print("---f1---") #在调用f1之前,已经进行装饰了 #f1() ## 运行结果 ---正在装饰--
2个装饰器
def w1(func): print(‘---正在装饰--‘) def inner(): print(‘---正在验证权限1--‘) func() return inner def w2(func): print(‘---正在装饰2--‘) def inner(): print(‘---正在验证权限2--‘) func() return inner @w2 @w1 def f1(): print(‘---f1‘) f1()
---正在装饰-- ---正在装饰2-- ---正在验证权限2-- ---正在验证权限1-- ---f1
标签:完成 ima print 自动 color return python hello alt
原文地址:http://www.cnblogs.com/venicid/p/7928729.html