好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

函数装饰器

装饰器又称语法糖,以下代码是装饰器没有简写之前:

# __*__ coding: utf-8 __*____author__ = "David.z"user_status = Falsedef login(func):def inner():#嵌套函数_username = "alex"  # 假装这个DB里存的用户信息_password = "abc123"  # 假装这是DB里存的用户密码global user_statusif user_status == False:
            username = input("user:").strip()
            password = input("password:").strip()if username == _username and password == _password:print("welcome login...")
                user_status = Trueelse:print("wrong username or password!")else:print("用户已登录,验证通过。。。")if user_status:
            func()return innerdef home():print("首页".center(15,"*"))def america():print("欧美专区".center(15, "*"))def japan():print("日韩专区".center(15,"*"))def henan():print("河南专区".center(15,"*"))
henan = login(henan) #innerprint(henan) #打印出来看看是不是内存地址henan() #加上()执行函数

 

以下代码是简写之后:

唯一区别就是在装饰的时候用@login

# __*__ coding: utf-8 __*____author__ = "David.z"user_status = Falsedef login(func):def inner():#嵌套函数_username = "alex"  # 假装这个DB里存的用户信息_password = "abc123"  # 假装这是DB里存的用户密码global user_statusif user_status == False:
            username = input("user:").strip()
            password = input("password:").strip()if username == _username and password == _password:print("welcome login...")
                user_status = Trueelse:print("wrong username or password!")else:print("用户已登录,验证通过。。。")if user_status:
            func()return innerdef home():print("首页".center(15,"*"))def america():print("欧美专区".center(15, "*"))def japan():print("日韩专区".center(15,"*"))
@logindef henan():print("河南专区".center(15,"*"))# henan = login(henan) #inner#
# print(henan) #打印出来看看是不是内存地址henan() #加上()执行函数

 

最后一点改变,现在是在调用函数里面加了参数调用,为了不影响其他函数的调用。需要在嵌套的函数里加入*args,**kwargs

 = = inner(*args,**kwargs):_username =   _password =    user_status === input(= input( username == _username  password ==(=((*args,**(.center(15,(.center(15, (.center(15,(.center(15,)%= login(henan) #japan =(henan) henan() japan()

 

 

两层嵌套函数,并带入参数的装饰器:

# __*__ coding: utf-8 __*____author__ = "David.z"user_status = Falsedef login(func2):def outer(func):def inner(*args, **kwargs):
            _username = "alex"  # 假装这个DB里存的用户信息_password = "abc123"  # 假装这是DB里存的用户密码global user_statusif user_status == False:
                username = input("user:").strip()
                password = input("password:").strip()if username == _username and password == _password:print("welcome login...")
                    user_status = Trueelse:print("wrong username or password!")else:print("用户已登录,验证通过。。。")if user_status:
                func(*args, **kwargs)return innerreturn outerdef home():print("首页".center(15,"*"))def america():print("欧美专区".center(15, "*"))
@login("weixin")def japan():print("日韩专区".center(15,"*"))
@login("qq")def henan(style):print("河南专区,---%s".center(15,"*")%style)

henan("3P")
japan()

 

查看更多关于函数装饰器的详细内容...

  阅读:43次