装饰器2

#-*- coding:utf-8 -*-
static = False
def login(func):        #这里func,用来把被修饰的函数名以参数传可以入进来,然后
                          #就可以在装饰器函数中的任意位置进行调用被装饰的函数,就是18line
    def inner():
        name_ = 'chenna'
        keyword_ = '1234'
        global static
        if static == False:
            name = (raw_input('输入用户名:')).strip()
            keyword = (raw_input('输入密码:')).strip()
            if name == name_ and keyword == keyword_:
                print ("登录成功")
                static = True
            else:
                print ('你输入的用户名或者密码错')
        if static == True:
            func()     #在这里调用了被装饰函数,对应3line

    return inner      #这里返回装饰器的里面的嵌套的函数的内存地址.这样就把内存地址赋值给
                       #American,然后在调用americna(),就是在调用inner函数,对应line26

def firstage():
    print ('欢迎进入首页')

@login    #相当于:在调用时的,american=login(american),
def american():
    print ('欢迎进入欧美界面')
@login
def japan():
    print ('欢迎进入日韩界面')

def china():
    print ('欢迎进入中国界面')

american()
原文地址:https://www.cnblogs.com/luckycn/p/7050576.html