python day18作业

作业:

# 1、编写课上讲解的有参装饰器准备明天默写
# 2:还记得我们用函数对象的概念,制作一个函数字典的操作吗,来来来,我们有更高大上的做法,
# 在文件开头声明一个空字典,然后在每个函数前加上装饰器,完成自动添加到字典的操作
op_dict = {}


def add_dict(dict_key):
    def wrapper(func):
        def inner(*args, **kwargs):
            op_dict[dict_key] = (func, func.__doc__)

        return inner

    return wrapper


@add_dict(1)
def f1():
    """f1功能"""
    print('f1')


@add_dict(2)
def f2():
    """f2功能"""
    print('f2')


f1()
f2()
print(op_dict)


# 3、 编写日志装饰器,实现功能如:一旦函数f1执行,则将消息2017-07-21 11:12:11 f1 run写入到日志文件中,
def dump_file(file):
    import time
    def wrapper(func):
        def inner(*args, **kwargs):
            start_time = time.strftime('%Y-%m-%d %X')
            with open(file, 'a+t', encoding='utf-8')as f:
                f.write(f'{start_time} {func} run\n')
            res = func(*args, **kwargs)
            return res

        return inner

    return wrapper


@dump_file('a.log')
def f1():
    print('f1功能')


f1()

# 注意:时间格式的获取
# import time
# time.strftime('%Y-%m-%d %X')
# 4、基于迭代器的方式,用while循环迭代取值字符串、列表、元组、字典、集合、文件对象
#  字符串
s = 'egon'
s = s.__iter__()
while True:
    try:
        print(next(s))
    except StopIteration:
        break
#  列表
l = [1, 2, 3, 4, 5, 6]
l = l.__iter__()
while True:
    try:
        print(next(l))
    except StopIteration:
        break
#  元组
t = (1, 2, 3, 4, 5)
t = t.__iter__()
while True:
    try:
        print(next(t))
    except StopIteration:
        break
# 字典
d = {}.fromkeys(range(1, 4), None)
d = iter(d)

while True:
    try:
        print(next(d))
    except StopIteration:
        break

# 集合
s = (1, 2, 3, 4)
s = s.__iter__()
while True:
    try:
        print(next(s))
    except StopIteration:
        break

#  文件对象
f = open('a.txt', 'r+t', encoding='utf-8')
while True:
    try:
        print(next(f))
    except StopIteration:
        break
f.close()


# 5、自定义迭代器实现range功能
def range(start, stop, step=1):
    while start < stop:
        yield start
        start += step


a = range(1, 5)
while True:
    try:
        print(next(a))
    except StopIteration:
        break

猜你喜欢

转载自www.cnblogs.com/xiaolang666/p/12563047.html