zoukankan      html  css  js  c++  java
  • 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实现二叉树的遍历 Marathon
    基于python实现链式队列代码 Marathon
    基于python常用排序与查找 Marathon
    elasticsearch要点及常用查询 Marathon
    elasticsearch练习 Marathon
    基于python实现单链表代码 Marathon
    gitlab 配置私人仓库 Marathon
    python虚拟环境的配置ubuntu 18.04 Marathon
    基于python实现顺序存储的队列代码 Marathon
    python实现elasticsearch操作CRUD API Marathon
  • 原文地址:https://www.cnblogs.com/2722127842qq-123/p/12568377.html
Copyright © 2011-2022 走看看