• 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
    '
    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)



  • 相关阅读:
    python 基础2.5 循环中continue与breake用法
    python 基础 2.4 while 循环
    python 基础 2.3 for 循环
    python 基础 2.2 if流程控制(二)
    python 基础 2.1 if 流程控制(一)
    python 基础 1.6 python 帮助信息及数据类型间相互转换
    python 基础 1.5 python数据类型(四)--字典常用方法示例
    Tornado Web 框架
    LinkCode 第k个排列
    LeetCode 46. Permutations
  • 原文地址:https://www.cnblogs.com/2722127842qq-123/p/12568377.html
Copyright © 2020-2023  润新知