python中装饰器应用的场景:装饰模式有很多经典的使用场景,例如插入日志、性能测试、事务处理等等,有了装饰器,就可以提取大量函数中与本身功能无关的类似代码,从而达到代码重用的目的。装饰器其实就是一个以函数作为参数并返回一个替换函数的可执行函数。
个人理解:为实现相同功能作用的函数而封装起来。
举例:
import time#引用时间函数 start=time.time() time.sleep(1) end=time.time() print(end-start)#1.0004706382751465 print(start) def show_time(f):#封装一个装饰器函数,目的是实现每个函数施行多少时间 def inner(x,y): start=time.time() f(x,y) end=time.time() print("spend%s"%(end-start)) return inner @show_time #等价于foo=show_time(foo) def foo(): print('foo......') time.sleep(2) @show_time #带有参数的装饰器 def add(x,y): print(x+y) time.sleep(2)
【2】带有参数的装饰器
def logger(flag=''): def show_time(f): def inner(*x,**y): start=time.time() f(*x,**y) end=time.time() print("spend%s"%(end-start)) if flag=='true': print('日志记录') return inner return show_time @logger('true')#@show_tim def add(*a,**b): sums=0 for i in a: sums+=i print(sums) time.sleep(2)
【3】利用装饰器做一个登录(类似京东的,京东的登录,如果你没有登录在添加商品要购买付款时,都会弹出一个登录界面)
user,passwd='user',123 loginstatus=False def login(f): def inner(): if loginstatus==False: username = input('username:') passwdword =int(input('passwd:')) # print(username,passwdword,user,passwd) # print(user ==username ) # print(passwd == passwdword) if user ==username and passwd == passwdword: print("welcome......") f() login_status=True else: print('登陆失败') else: pass return inner @login def home():#home=login(hoome) print("welcome to home page") home() @login def finace():#金融 print("welcome to finace page") @login def book(): print("welcome ton home page")