3/01课后总结
装饰器装饰器简易版本
def outer(func_name):
# func_name = index
def get_time():
# 1. 在函数执行之前,要记录一下此时的时间
start_time = time.time()
# 2. 开始执行函数
func_name()
# 3. 函数执行完毕之后,再次记录此时的时间
end_time = time.time()
# 4. 统计函数的执行时间
print('执行了%s秒' % (end_time - start_time))
return get_time
index=outer(index) # get_time的内存地址
index()
装饰器解决参数问题
def outer(func_name):
# func_name = index
def get_time(*args, **kwargs):
# 1. 在函数执行之前,要记录一下此时的时间
start_time = time.time()
# 2. 开始执行函数
func_name(*args, **kwargs)
# 3. 函数执行完毕之后,再次记录此时的时间
end_time = time.time()
# 4. 统计函数的执行时间
print('执行了%s秒' % (end_time - start_time))
return get_time
index = outer(index) # get_time的内存地址
index()
解决返回值问题
def outer(func_name):
# func_name = index
def get_time(*args, **kwargs):
# 1. 在函数执行之前,要记录一下此时的时间
start_time = time.time()
# 2. 开始执行函数
res=func_name(*args, **kwargs) # index()
# 3. 函数执行完毕之后,再次记录此时的时间
end_time = time.time()
# 4. 统计函数的执行时间
print('执行了%s秒' % (end_time - start_time))
return res # 才是真正的函数的返回结果
return get_time
# index = outer(index) # get_time的内存地址
# res=index()
# print(res) # None
home=outer(home)
print(home())
课堂练习题1
# 写一个认证装饰器
# 定义一个index函数,让用户输入用户名和密码,如果输入正确,就执行index函数,否则不能执行函数
def outer(flag):
# flag
def config():
x = input('请输入用户名')
y = input('请输入密码')
if x == '111' and y == '111':了,
flag()
return config
@outer
def index():
print(123)
# index = outer(index)
index()
装饰器的固定模板
def outer(func):
def inner(*args, **kwargs):
# 此处为函数执行前需要添加的功能
res=func(*args, **kwargs)
# 此处为函数执行后需要添加的功能
return res
return inner
语法糖
@outer # index=outer(index)
def index():
print('from index')
index()
@outer # home = outer(index)
def home():
print('from home')
"""
在需要装饰的函数前加@+装饰函数名
"""
多层语法糖
@login_auth # index=login_auth(get_time)
@outer # get_time=outer(index)
def index():
print('from index')
index()
"""
在需要装饰的函数前加多个@+装饰函数名
自上向下,最低层在最上层
运行时,自下向上,从最下一个开始调用
"""
装饰器修复技术
from functools import wraps
def login_auth(func_name):
# func_name = index
@wraps(func_name) # 修复技术是为了让被装饰对象不容易被察觉装饰了
def auth():
# 1. 让用户输入用户名和密码
username = input('username:').strip()
password = input('password:').strip()
# 2. 要认证,判断用户名和密码是否正确
if username == 'kevin' and password == '123':
# 才是正常执行的函数
res=func_name()
return res
else:
print('认证失败,不能执行函数')
return auth
@login_auth
def index():
print(123)
help(index)
"""
Help on function index in module __main__:
此时就是已经被装饰过index()显示为index
Help on function auth in module __main__:
这是没有被装饰过的
"""
课堂练习题2
# 判断七句print执行顺序
def outter1(func1):
print('加载了outter1')
def wrapper1(*args, **kwargs):
print('执行了wrapper1')
res1 = func1(*args, **kwargs)
return res1
return wrapper1
def outter2(func2):
print('加载了outter2')
def wrapper2(*args, **kwargs):
print('执行了wrapper2')
res2 = func2(*args, **kwargs)
return res2
return wrapper2
def outter3(func3):
print('加载了outter3')
def wrapper3(*args, **kwargs):
print('执行了wrapper3')
res3 = func3(*args, **kwargs)
return res3
return wrapper3
@outter1
@outter2
@outter3
def index():
print('from index')
'''
自下向上去调用,然后可以采用函数递归的思想来思考结果
'''
有参装饰器
def outter(source_data,a,b,c,d,e,f, *args, **kwargs):
source_data='file'
def login_auth(func_name):
# func_name = index
def auth(*args, **kwargs):
# 1. 让用户输入用户名和密码
username = input('username:').strip()
password = input('password:').strip()
# 2. 要认证,判断用户名和密码是否正确
if source_data == 'file':
print('数据来源是文件')
elif source_data=='mysql':
print('数据来源是MySQL')
elif source_data=='oracle':
print('数据来源是oracle')
else:
print('认证失败,不能执行函数')
return auth
return login_auth
@outter('file',1,2,3,4,5,6,) # @login_auth
def index():
print('from index')
标签:总结,index,01,outer,课后,time,print,return,def
From: https://www.cnblogs.com/juzixiong/p/17169775.html