一:编写函数(函数执行的时间是随机的)
二:编写装饰器,为函数加上统计时间的功能
四:编写装饰器,为多个函数加上认证的功能(用户的账号密码来源于文件),要求登录成功一次,后续的函数都无需再输入用户名和密码
注意:从文件中读出字符串形式的字典,可以用eval('{"name":"egon","password":"123"}')转成字典格式
五:编写下载网页内容的函数,要求功能是:用户传入一个url,函数返回下载页面的结果
六:为题目五编写装饰器,实现缓存网页内容的功能:
实现下载的页面存放于文件中,如果文件内有值(文件大小不为0),就优先从文件中读取网页内容,否则,就去下载,然后存到文件中
import time
import random
def fun1():
time.sleep(random.randrange(1,3))
print(random.randrange(1,3))
fun1()
二:编写装饰器,为函数加上统计时间的功能
import time
import random
def timer(func):
#func = fun1
def wrapper():
star_time = time.time()
func()
stop_time = time.time()
print('执行时间:%s' %(stop_time - star_time))
return wrapper
@timer
def fun1():
time.sleep(random.randrange(1,3))
print('你不是傻了吧!')
fun1()
三:编写装饰器,为函数加上认证的功能
import time
import random
def timer(func):
#func = fun1
def wrapper():
star_time = time.time()
func() # fun1
stop_time = time.time()
print('执行时间:%s' %(stop_time - star_time))
return wrapper
def auth_deco(func):
def deco():
user = input('username:')
pwd = input('password:')
if user == '123' and pwd == '123':
print('Login Successful')
func() # wrapper
else:
print('Login err')
return deco
@auth_deco
@timer
def fun1():
time.sleep(random.randrange(1,3))
print('你不是傻了吧!')
fun1()
四:编写装饰器,为多个函数加上认证的功能(用户的账号密码来源于文件),要求登录成功一次,后续的函数都无需再输入用户名和密码
注意:从文件中读出字符串形式的字典,可以用eval('{"name":"egon","password":"123"}')转成字典格式
db_path=r'C:\文件绝对路径\a.txt'
login_dic = {
'user':None,
'status':False,
}
def auth_deco(func):
def wrapper(*args,**kwargs):
if login_dic['user'] and login_dic['status']:
res = func(*args,**kwargs)
return res
user = input('username:')
pwd = input('password:')
with open(db_path, 'r', encoding='utf-8') as read_f:
user_dic = eval(read_f.read())
if user in user_dic and pwd == user_dic[user]:
print('Login Successful')
login_dic['user'] = user
login_dic['status'] = True
res = func(*args, **kwargs)
return res
else:
print('用户名或者密码错误,重新登录')
return wrapper
@auth_deco
def index():
print('welcome to index')
@auth_deco
def home(name):
print('welcome %s to home page' %name)
print(user_dic)
index()
home('egon')
五:编写下载网页内容的函数,要求功能是:用户传入一个url,函数返回下载页面的结果
from urllib.request import urlopen
def get(url):
return urlopen(url).read()
print(get('https://www.python.org'))
六:为题目五编写装饰器,实现缓存网页内容的功能:
实现下载的页面存放于文件中,如果文件内有值(文件大小不为0),就优先从文件中读取网页内容,否则,就去下载,然后存到文件中
from urllib.request import urlopen
import os
cache_path = r'D:\Learn\PyCharm\b.txt'
def make_cache(func):
def wrapper(*args, **kwargs):
if os.path.getsize(cache_path):
with open(cache_path,'rb') as f:
res = f.read()
else:
res = func(*args, **kwargs)
with open(cache_path,'wb') as f:
f.write(res)
return res
return wrapper
@make_cache
def get(url):
return urlopen(url).read()
print(get('https://www.python.org'))
七:在文件开头声明一个空字典,然后在每个函数前加上装饰器,完成自动添加到字典的操作
func_dic={}
def deco(key):
def deco2(func):
func_dic[key]=func
return deco2
@deco('f1')
def f1():
print('from f1')
@deco('f2')
def f2():
print('from f2')
@deco('f3')
def f3():
print('from f3')
print(func_dic)
while True:
cmd = input('>>: ').strip()
if cmd in func_dic:
func_dic[cmd]()