20.03.24作业

2:还记得我们用函数对象的概念,制作一个函数字典的操作吗,来来来,我们有更高大上的做法,在文件开头声明一个空字典,然后在每个函数前加上装饰器,完成自动添加到字典的操作

dic={}
def func(choice):
    def wrapper(f):
        dic[choice]=f
        def inner(*args,**kwargs):
            f(*args,**kwargs)
        return inner
    return wrapper
@func('1')
def login():
    pass
@func('2')
def register():
    pass

3、 编写日志装饰器,实现功能如:一旦函数f1执行,则将消息2017-07-21 11:12:11 f1 run写入到日志文件中,日志文件路径可以指定
注意:时间格式的获取

import time

def wrapper(func):
    def inner(*args,**kwargs):

        with open('a.txt','w',encoding='utf-8') as f:
            func(*args, **kwargs)
            res = time.strftime('%Y-%m-%d %X')
            f.write(res)

    return inner

@wrapper
def f1():

    print('你个傻逼')
f1()

4、基于迭代器的方式,用while循环迭代取值字符串、列表、元组、字典、集合、文件对象

d='abcdfe'
d_iterator=d.__iter__()
while True:
    try:
        print(d_iterator.__next__())
    except StopIteration:
        break
lis=[1,2,3,4]
list=lis.__iter__()
while True:
    try:
        print(list.__next__())
    except StopIteration:
        break
tupe=('a','b','c','d')
tup=tupe.__iter__()
while True:
    try:
        print(tup.__next__())
    except StopIteration:
         break
dic={'a':1,'b':2}
di=dic.__iter__()
while True:
    try:
        print(di.__next__())
    except StopIteration:
        break
a={'a','b','c'}
b=a.__iter__()
while True:
    try:
        print(b.__next__())
    except  StopIteration:
        break

with open('a.txt',mode='r') as f:
    res=f.read()
    f1=res.__iter__()
while True:
    try:
        print(f1.__next__())
    except StopIteration:
        break

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

def re_range(start,end,step=1):
    while start<end:
        yield start
        start+=step
cc=re_range(1,10,2)
print(cc)
for line in cc:
    print(line)
原文地址:https://www.cnblogs.com/zhangjinyi97/p/12562639.html