3-24作业

作业:
1、编写课上讲解的有参装饰器准备明天默写
2:还记得我们用函数对象的概念,制作一个函数字典的操作吗,来来来,我们有更高大上的做法,在文件开头声明一个空字典,然后在每个函数前加上装饰器,完成自动添加到字典的操作
3、 编写日志装饰器,实现功能如:一旦函数f1执行,则将消息2017-07-21 11:12:11 f1 run写入到日志文件中,日志文件路径可以指定
注意:时间格式的获取
import time
time.strftime('%Y-%m-%d %X')
4、基于迭代器的方式,用while循环迭代取值字符串、列表、元组、字典、集合、文件对象
5、自定义迭代器实现range功能

1、编写课上讲解的有参装饰器准备明天默写

func_dic = {}

# 有参装饰器 x接收的是用户输入功能对应的编号
def outer(x): # x ---> '1'
# 无参装饰器
def wrapper(func): # func --> login, func --> register
func_dic[x] = func # {'1': login, '2': register}

def inner(*args, **kwargs):
res = func(*args, **kwargs)

return res

return inner

return wrapper


@outer('1') # ---> @wrapper
def login():
pass


@outer('2')
def register():
pass


print(func_dic)
 

2、还记得我们用函数对象的概念,制作一个函数字典的操作吗,来来来,我们有更高大上的做法,在文件开头声明一个空字典,然后在每个函数前加上装饰器,完成自动添加到字典的操作

 1 d = {}
 2 key = 0
 3 def add_dict(func):
 4     def wrapper(*args, **kwargs):
 5         global key
 6         d['{}'.format(key)] = func
 7         key += 1
 8     return wrapper
 9 
10 @add_dict
11 def index():
12     pass
13 @add_dict
14 def home():
15     pass
16 index()
17 home()
18 
19 print(d)
 

3、 编写日志装饰器,实现功能如:一旦函数f1执行,则将消息2017-07-21 11:12:11 f1 run写入到日志文件中,日志文件路径可以指定
注意:时间格式的获取
import time
time.strftime('%Y-%m-%d %X')

import time


# 给被装饰对象添加执行日志装饰器
def add_log_wrapper(func):
def inner(*args, **kwargs):

# 在被装饰对象调用前的操作
# 1) 将被装饰对象的执行日志 写入 log.txt文件中
with open('log.txt', 'a', encoding='utf-8') as f:
now_time = time.strftime('%Y-%m-%d %X')
func_name = func.__name__
log_str = f'{now_time} {func_name} run '
print(log_str)
f.write(log_str)

res = func(*args, **kwargs) # 被装饰对象的调用

# 在被装饰对象调用后的操作

return res

return inner


@add_log_wrapper
def f1():
# time.sleep(10)
print('我是f1函数的执行...')


@add_log_wrapper
def f2():
print('我是f2函数的执行')
# f1()

f2()
 

4、基于迭代器的方式,用while循环迭代取值字符串、列表、元组、字典、集合、文件对象

def my_iter(obj):  # 字符串、列表、元组、字典、集合、文件
# 'tank'.__iter__()
iter_obj = obj.__iter__()
while True:
try:
print(iter_obj.__next__())

except StopIteration:
break

my_iter('tom')

5、自定义迭代器实现range功能

# res = range(1, 10, 2)
# print(res)
# print(type(res)) # <class > 都想象成一个迭代器


def my_range(start, end, move=1): # 10-9
while start < end:
# print(start) # 1, 3, 5, 7, 9
yield start
start += move # start += 2



res1 = range(1, 10, 2)
# __str__: range(1, 10, 2)
print(res1) # range(1, 10, 2) ---> class range()

res2 = my_range(1, 10, 2) # <generator object my_range at 0x10712e410>
print(res2)

for line in res1:
print(line)

for line2 in res2:
print(line2)
 

====================本周选做作业如下====================
编写小说阅读程序实现下属功能
# 一:程序运行开始时显示
0 账号注册
1 充值功能
2 阅读小说


# 二: 针对文件db.txt,内容格式为:"用户名:密码:金额",完成下述功能
2.1、账号注册
2.2、充值功能

# 三:文件story_class.txt存放类别与小说文件路径,如下,读出来后可用eval反解出字典
{"0":{"0":["倚天屠狗记.txt",3],"1":["沙雕英雄转.txt",10]},"1":{"0":["令人羞耻的爱.txt",6],"1":["二狗的妻子与大草原的故事.txt",5]},}

3.1、用户登录成功后显示如下内容,根据用户选择,显示对应品类的小说编号、小说名字、以及小说的价格
"""
0 玄幻武侠
1 都市爱情
2 高效养猪36技
"""

3.2、用户输入具体的小说编号,提示是否付费,用户输入y确定后,扣费并显示小说内容,如果余额不足则提示余额不足

# 四:为功能2.2、3.1、3.2编写认证功能装饰器,要求必须登录后才能执行操作

# 五:为功能2.2、3.2编写记录日志的装饰器,日志格式为:"时间 用户名 操作(充值or消费) 金额"

# 附加:
# 可以拓展作者模块,作者可以上传自己的作品

原文地址:https://www.cnblogs.com/2722127842qq-123/p/12559071.html