装饰器的作用:用来装饰特定函数,
原则:不改变原来的函数代码,不改变函数调用方式,为函数增加新的功能
应用:假设我定义了一个登录页面的函数,登录后显示登录成功,我想,在不修改函数的同时让每次登录有个验证用户名和密码的过程,登录成功则执行函数,不成功提醒用户重新输入。
分析:1,定义一个函数 2,定义另一个函数,验证成功后执行这个函数命令
#!coding:utf-8 # Author:pymingming user, pwd = 'ming','123' #装饰器函数 = 高阶函数+嵌套函数组合 def verify(func):#外层函数 def deco(*args,**kwargs):#嵌套函数 while True: username = input("please input your username:").strip() password = input("please input your password:").strip() if user == username and pwd == password: func(*args,**kwargs)#func需要带括号,相当于执行login() break else: print('invalid username or password, please input again!') return deco #deco不能带括号, #login = verfity(login) = deco,相当于return verfity(login) @verify #执行了上面的装饰函数 ,下面的函数其实在上面的函数内部被执行 def login(): print('welcome to visit this page') login()
运行结果:
please input your password:mki invalid username or password, please input again! please input your username:ming please input your password:123 welcome to visit this page Process finished with exit code 0