# 1、有参装饰器模板 from functools import wraps def outter(extra): def passer(func): @wraps(func) def wrapper(*args, **kwargs): print(extra) res = func(*args, **kwargs) return res return wrapper return passer
# 2:还记得我们用函数对象的概念,制作一个函数字典的操作吗,来来来,我们有更高大上的做法,在文件开头声明一个空字典, # 然后在每个函数前加上装饰器,完成自动添加到字典的操作 def join_dict(tar_dict): def passer(func): def wrapper(*args, **kwargs): func_key = str(len(tar_dict) + 1) func_value_0 = func(*args, **kwargs) func_value_1 = func func_value_list = [func_value_0, func_value_1] tar_dict[func_key] = func_value_list return wrapper return passer func_dict = {} @join_dict(func_dict) def func1(): print('执行功能1') return '功能1' @join_dict(func_dict) def func2(): print('执行功能2') return '功能2' @join_dict(func_dict) def func3(): print('执行功能3') return '功能3'
# 3、 编写日志装饰器,实现功能如:一旦函数f1执行,则将消息2017-07-21 11:12:11 f1 run写入到日志文件中,日志文件路径可以指定 # 注意:时间格式的获取 import time def return_time(file_path): def passer(func): def wrapper(*args, **kwargs): with open(r'{}'.format(file_path), mode='at', encoding='utf-8')as file: file.write(time.strftime('%Y-%m-%d %X') + '\n') res = func() return res return wrapper return passer @return_time('03 时间日志.txt') def func1(): print('执行func1')
# 4、基于迭代器的方式,用while循环迭代取值字符串、列表、元组、字典、集合、文件对象 s = 'abc' s_iter = iter(s) while 1: try: print(next(s_iter)) except StopIteration: break l = ['a', 'b', 'c'] l_iter = iter(l) while 1: try: print(next(l_iter)) except StopIteration: break t = ('a', 'b', 'c') t_iter = iter(t) while 1: try: print(next(t_iter)) except StopIteration: break d = {'a': 1, 'b': 2, 'c': 3} d_iter = iter(d) while 1: try: print(next(d_iter)) except StopIteration: break ss = {'a', 'b', 'c'} ss_iter = iter(ss) while 1: try: print(next(ss_iter)) except StopIteration: break with open(r'04 abc.txt', mode='rt', encoding='utf-8')as f: while 1: try: print(next(f)) except StopIteration: break
# 5、自定义迭代器实现range功能 def define_range(star, end, step): while star < end: yield star star += 1 num_iter = define_range(1, 10, 1) for num in num_iter: print(num)