装饰器 = 高阶函数+函数嵌套+闭包
高阶函数 = 参数 or 返回值为函数
函数嵌套 = 在函数中定义函数
闭包 = 封装变量or函数的
装饰器:
@装饰器名 等于:函数名 = 装饰器(函数名)
原函数
'''装饰器基本结构'''
def umm(func):
def ujj():
sta_time = time.time()
ret=func()
spo_time = time.time()
print('运行时间:%s' % (spo_time - sta_time))
return ret
return ujj
@umm #ugg=umm(ugg) 装饰器表达形式
def ugg():
print('油鸡鸡')
return '油鸡鸡的返回'
print(ugg())
装饰器以参数形式带入需装饰函数,返回值为下一层嵌套函数。
嵌套第一层带入被装饰函数参数,以(*args, **kwargs)接收。返回值为被装饰函数。
'''装饰器的进阶结构_登陆功能'''
user_dic = {'name': None, 'login': False} #登陆状态
def auth_login(func):
def wrapper(*args, **kwargs): #基本嵌套结构
if user_dic['name'] and user_dic['login']: #判断登陆状态是否为true
res = func(*args, **kwargs) #true直接执行被修饰函数
return res
user_n = input('输入用户名:') #登陆框
pass_w = input('请输入密码:') #登陆框
if user_n == 'd' and pass_w =='2': #代指用户名数据库匹配
user_dic['name'] = user_n #修改登陆状态
user_dic['login'] = True #修改登陆状态
res = func(*args, **kwargs) #执行被修饰函数
return res
else:
print('its error')
return wrapper
@auth_login
def index(name):
print('这是%s的简历' % name)
@auth_login
def object(name):
print('这是%s的项目' % name)
index('狗剩')
object('狗剩')
在需要导入某些数据时,比如input,往往需要加上.strip()方法。以去除\n、\r和首尾的空格换行符。