函数之装饰器

as_start = False
def login(func):
def inner():
global as_start
if as_start == False:
username = input('输入用户名字:')
password = input('输入密码:')
if username == 'alex' and password == '1234':
print('登录成功!')
as_start = True
else:
print('账户或者密码错误!')
if as_start == True:
func()
return inner
def func1():
print('河南专区!')
def func2():
print('欧美专区!')
@login
def func3():
print('日韩专区!')
#func3 = login(func3)
func3()

#@login #语法糖
#func3() = login(func3)#上下这俩方式是对等的
#在这里第一执行’login(func3)‘同时传入‘func3’程序由上向下执行遇见函数‘inner()’然后向下找调用‘inner’的调用同时也找‘func()’的调用但是func()
不在登录状态,就说明func()没有登录随之去判断‘as_start’是否是‘True’ 如果是‘True’就会直接执行‘func()打印‘日韩专区’否则就执行‘inner’登录,’func()等于
老func3()顺之向下执行最后把‘inner’返回给’login()‘而‘login()’又等于’func3‘此时调用‘func3’()就是调用‘innere()’然后登录成功,
再次判断‘as_start’是否是‘True’结果为‘True’ 最后调用func()即func3()打印‘日韩专区’



as_style = False
def login(style):
def outer(func):
def ineer(*args, **kwargs):
global as_style
username = input('请输入账户名字:')
password = input('请输入密码!')
if as_style == False:
if username == 'alex' and password == '1234':
as_style = Truejishang
else:
print('账号或者密码错误!')
if as_style ==True:
func(*args, **kwargs)
return ineer
return outer
def emcari():
print('欧美专区!')
def japan():
print('日本专区!')
login(‘qq’)
def henan(style):
print('河南专区!')
ss = login('qq')
#henan = ss(henan)
henan('3p')
#继上次又加了一层函数,把‘outer’的内存地址给了‘ss’其实这一步是在‘login’里完成的 然后调用河南就是‘ineer’继续之前的运行法运行
原文地址:https://www.cnblogs.com/yuexijun/p/10009742.html