2-24作业讲解

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

# 2:还记得我们用函数对象的概念,制作一个函数字典的操作吗,来来来,
# 我们有更高大上的做法,在文件开头声明一个空字典,然后在每个函数前加上装饰器,
# 完成自动添加到字典的操作
 1 # func_dic = {'1': login, '2': register}
 2 
 3 
 4 func_dic = {}
 5 
 6 # 有参装饰器  x接收的是用户输入功能对应的编号
 7 def outer(x):  # x ---> '1'
 8     # 无参装饰器
 9     def wrapper(func):  # func --> login, func --> register
10         func_dic[x] = func  # {'1': login, '2': register}
11 
12         def inner(*args, **kwargs):
13             res = func(*args, **kwargs)
14 
15             return res
16 
17         return inner
18 
19     return wrapper
20 
21 
22 @outer('1')  # ---> @wrapper
23 def login():
24     pass
25 
26 
27 @outer('2')
28 def register():
29     pass
30 
31 
32 print(func_dic)




# 3、 编写日志装饰器,实现功能如:一旦函数f1执行,
# 则将消息2017-07-21 11:12:11 f1 run写入到日志文件中,日志文件路径可以指定
# 注意:时间格式的获取
# import time
# time.strftime('%Y-%m-%d %X')
 1 import time
 2 
 3 
 4 # 给被装饰对象添加执行日志装饰器
 5 def add_log_wrapper(func):
 6     def inner(*args, **kwargs):
 7 
 8         # 在被装饰对象调用前的操作
 9         # 1) 将被装饰对象的执行日志 写入 log.txt文件中
10         with open('log.txt', 'a', encoding='utf-8') as f:
11             now_time = time.strftime('%Y-%m-%d %X')
12             func_name = func.__name__
13             log_str = f'{now_time} {func_name} run\n'
14             print(log_str)
15             f.write(log_str)
16 
17         res = func(*args, **kwargs)  # 被装饰对象的调用
18 
19         # 在被装饰对象调用后的操作
20 
21         return res
22 
23     return inner
24 
25 
26 @add_log_wrapper
27 def f1():
28     # time.sleep(10)
29     print('我是f1函数的执行...')
30 
31 
32 @add_log_wrapper
33 def f2():
34     print('我是f2函数的执行')
35 # f1()
36 
37 f2()




# 4、基于迭代器的方式,用while循环迭代取值字符串、列表、元组、字典、集合、文件对象
 1 def my_iter(obj):  # 字符串、列表、元组、字典、集合、文件
 2     # 'tank'.__iter__()
 3     iter_obj = obj.__iter__()
 4     while True:
 5         try:
 6             print(iter_obj.__next__())
 7 
 8         except StopIteration:
 9             break
10 
11 my_iter('tank')



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

 1 # res = range(1, 10, 2)
 2 # print(res)
 3 # print(type(res))  # <class > 都想象成一个迭代器
 4 
 5 
 6 def my_range(start, end, move=1):  # 10-9
 7     while start < end:
 8         # print(start)  # 1, 3, 5, 7, 9
 9         yield start
10         start += move  # start += 2
11 
12 
13 
14 res1 = range(1, 10, 2)
15 # __str__: range(1, 10, 2)
16 print(res1)  # range(1, 10, 2) ---> class range()
17 
18 res2 = my_range(1, 10, 2)  # <generator object my_range at 0x10712e410>
19 print(res2)
20 
21 for line in res1:
22     print(line)
23 
24 for line2 in res2:
25     print(line2)



猜你喜欢

转载自www.cnblogs.com/2722127842qq-123/p/12568377.html