感谢alex http://www.cnblogs.com/alex3714/articles/5765046.html


1、最简单的计算方法运行时间

import time

def timer(func):
    """计算一个方法运行的时间"""
    def deco():
        start_time = time.time()
        func()
        stop_time = time.time()
        print("the func run time is %s" % (stop_time - start_time))
    return deco

@timer
def test():
    time.sleep(3)
    print("in the test func")

test()

2. 一个简单的用户认证系统

#_*_coding:utf-8_*_

user_status = False #用户登录了就把这个改成True

def login(func): #把要执行的模块从这里传进来

    def inner():#再定义一层函数
        _username = "alex" #假装这是DB里存的用户信息
        _password = "abc!23" #假装这是DB里存的用户信息
        global user_status

        if user_status == False:
            username = input("user:")
            password = input("pasword:")

            if username == _username and password == _password:
                print("welcome login....")
                user_status = True
            else:
                print("wrong username or password!")

        if user_status == True:
            func() # 看这里看这里,只要验证通过了,就调用相应功能

    return inner #用户调用login时,只会返回inner的内存地址,下次再调用时加上()才会执行inner函数

@login
def america():
    print("----欧美专区----")

def japan():
    print("----日韩专区----")

3. 一个通用版的用户认证系统

#_*_coding:utf-8_*_

user_status = False #用户登录了就把这个改成True

def login(auth_type): #把要执行的模块从这里传进来
    def auth(func):
        def inner(*args,**kwargs):#再定义一层函数
            if auth_type == "qq":
                _username = "alex" #假装这是DB里存的用户信息
                _password = "abc!23" #假装这是DB里存的用户信息
                global user_status

                if user_status == False:
                    username = input("user:")
                    password = input("pasword:")

                    if username == _username and password == _password:
                        print("welcome login....")
                        user_status = True
                    else:
                        print("wrong username or password!")

                if user_status == True:
                    return func(*args,**kwargs) # 看这里看这里,只要验证通过了,就调用相应功能
            else:
                print("only support qq ")
        return inner #用户调用login时,只会返回inner的内存地址,下次再调用时加上()才会执行inner函数

    return auth

def home():
    print("---首页----")

@login('qq')
def america():
    print("----欧美专区----")

def japan():
    print("----日韩专区----")

@login('weibo')
def other(style):
    '''
    :param style: 喜欢看什么类型的,就传进来
    :return:
    '''
    print("----其他专区----")

home()

# america = login(america) #你在这里相当于把america这个函数替换了
# 那用户调用时依然写
america()

# other("3p")