python 装饰器

 python   高蒙   阅读(516)   评论(5)   2018-04-30 11:08:11     


python装饰器就是用于拓展原来函数功能的一种函数,这个函数的特殊之处在于它的返回值也是一个函数,使用python装饰器的好处就是在不用更改原函数的代码前提下给函数增加新的功能。 

对于理解python装饰器,我这里准备了几个小例子,一步步的详情解释,python装饰器是什么,如何去使用,最后在留下一道题目,测试自己是否理解了python装饰器。


import time

# 第一例

def foo():
    print('foo...')
    time.sleep(1)
    
def show_time(f):
    def inner():
        start = time.time()
        f()
        end = time.time()
        print('spend %s '%(end-start))
    return inner
foo=show_time(foo)
foo()


# 第二例

def show_time(f):
    def inner():
        start = time.time()
        f()
        end = time.time()
        print('spend %s '%(end-start))
    return inner
    
@show_time # foo=show_time(foo)
def foo():
    print('foo...')
    time.sleep(1)
foo()


# 第三例

def show_time(f):
    def innner(*a,**b):
        start = time.time()
        f(*a,**b)
        end = time.time()
        print('spend %s ' % (end - start))
    return innner
    
@show_time # foo=show_time(foo)
def add(*a,**b):
    sum_num = 0;
    for i in a:
        sum_num += i;
    print(sum_num)
    time.sleep(1)
add(1,2,4,5)


# 第四例 装饰器形参

def log(flag=''):
    def show_time(f):
        def innner(*a, **b):
            start = time.time()
            f(*a, **b)
            end = time.time()
            print('spend %s ' % (end - start))
            if flag=='true':
                print('打印日志')
        return innner
    return show_time
    
@log('true')  # foo=log(foo) foo(add(*a,**b))
def add(*a,**b):
    sum_num = 0;
    for i in a:
        sum_num += i;
    print(sum_num)
    time.sleep(1)
add(1,2,4,5)

@log()
def bar(*a,**b):
    sum_num = 0;
    for i in a:
        sum_num += i;
    print(sum_num)
    time.sleep(1)
bar(1,2,4,5)

## 题目

# 练习作业

# 题目:一个登陆的小程序

# 要求:1 当进入home() 和 shopcar() 的时候,需要验证登录

#      2 当进入book() 页面的是则不需要登陆

#      3 在home() 或者 shopcar() 页面 登陆过则不需要登陆

#      4 依次执行三个函数 home() shopcar() book()

user= 'admin'
passwd = 123
login_status = False
def login(auth_type=''):
    def inner(f):
        def main():
            global login_status
            f()
            if login_status == False:
                if auth_type == 'jindong':
                    print('jindong..login...')
                elif auth_type =='weixin':
                    print('weixin...login...')
                else:
                    pass
                username = input("username:")
                password = int(input("password:"))
                if user == username and passwd == password:
                    print('welcome...')
                    login_status = True
                else:
                    print('username or password is error')
        return main
    return inner
@login('jindong')
def home():
    print('home...')
@login('weixin')
def shopcar():
    print('shopcar...')
def book():
    print('book...')
home()
shopcar()
book()





相关文章



我要评论


站长昵称:(*)

输入内容:


评论列表


高蒙

男,程序猿一枚

 

人生要是没有理想, 那跟一条咸鱼有什么分别。


关于我

  http://www.shuchengxian.com

高蒙个人博客是以PHP技术为主的程序员个人博客。博客主要发布php开发中遇到的问题以及解决办法,同时个人博客也分享网站模板素材,jquery插件等方面素材。


站点声明:相关侵权、举报、投诉及建议等,请发E-mail:936594075#qq.com(#替换成@)。

Copyright © 2018, www.shuchengxian.com, All rights reserved. 个人博客皖公网安备 34152302000022号 皖ICP备15015490号

关键词:个人博客,PHP博客,PHP博客程序,高蒙博客,高蒙个人博客,php程序员博客,程序员个人博客