装饰器

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")

 

posted @ 2018-06-04 08:57  小L小  阅读(192)  评论(0编辑  收藏  举报