python装饰器原理及相关操作

python装饰器,简单的说就是用于操作底层代码的代码,在不改变底层代码函数的情况下对底层代码进行验证操作等

首先,必须知,道调用func和func的区别,分别为返回函数所在的内存地址和调用该函数,输出执行结果,例如:

def func():
    print("欢迎光临!!!")

print("返回函数所在的内存地址:",func)
func()

列举一个简单的web页面调用例子

 1 #做登录验证
 2 def login(func):
 3     print("登录成功")
 4     return func
 5 
 6 def index(name):
 7     print("欢迎【%s】光临首页!"@name)
 8 def tv(name):
 9     print("欢迎【%s】光临电视页!"@name)
10 def tv():
11     print("欢迎光临电视页!")
12 
13 tv=login(tv)
14 tv()

由上述代码可知,为了进行登录验证,需要进行额外的操作,改变了使用部门的操作,有没有办法直接让使用部门使用tv()来调用验证呢?

 1 ef login(func):
 2     def inner(*args):
 3         print("登录成功")
 4         func(*args)
 5     return inner
 6 
 7 @login
 8 def index(name):
 9     print("Welcome %s to Index"% name)
10 @login
11 def tv(name,password):
12     print("Welcome %s to TV"% name)
13 # def tv():
14 #     print("Welcome %s to TV")
15 def moive(name):
16     print("Welcome %s to Movie"% name)
17 
18 # tv=login(tv)
19 # tv()
20 tv("Eric","123")
21 index("EEric")

函数执行:函数首先顺序执行login,然后调转到@login,将index信息传入内存,返回index所调用的inner 函数,然后继续执行下面的函数,返回tv所调用的内部函数inner,继续执行下面的moive函数,然后继续执行下方调用,返回到inner继续执行inner内部语句,并调用函数的执行;

装饰器的作用:即不改变原有底层函数的内部逻辑,来实现对底层函数的操作

 

posted @ 2016-10-17 19:54  Eric9  阅读(195)  评论(0编辑  收藏  举报