python第十八天作业

作业:

1、编写课上讲解的有参装饰器准备明天默写

def auth(db_type):
    def deco(func):
        def wrapper(*args, **kwargs):
            name = input('your name>>>: ').strip()
            pwd = input('your password>>>: ').strip()
            with open(r'db.txt', 'rb') as f:
                for line in f:
                    user_name, user_pwd = line.decode('utf-8').strip().split(':')
                    if db_type == 'file':
                        print('基于文件的验证')
                        if name == user_name and pwd == user_pwd:
                            res = func(*args, **kwargs)  # index(1,2)
                            return res
                        else:
                            print('user or password error')
                    elif db_type == 'mysql':
                        print('基于mysql的验证')
                    elif db_type == 'ldap':
                        print('基于ldap的验证')
                    else:
                        print('不支持该db_type')
        return wrapper
    return deco

@auth(db_type='file')
def index(x,y):
    print('index->>%s:%s' % (x, y))

@auth(db_type='mysql')
def home(name):
    print('home->>%s' % name)

@auth(db_type='ldap')
def transfer():
    print('transfer')

index(1,2)

2:在文件开头声明一个空字典,然后在每个函数前加上装饰器,完成自动添加到字典的操作

dic = {}
def deoc(func):
    def wrapper(*args,**kwargs):
        key = input('请输入key值:>>').strip()
        dic[key] = func
    return wrapper

@deoc
def index():
    pass
@deoc
def home():
    pas

index()
home()
print(dic)

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

注意:时间格式的获取

import time
time.strftime('%Y-%m-%d %X')
def path_log(path):
    def msg_log(func):
        def wrapper(*args, **kwargs):
            res = func(*args, **kwargs)
            with open(path, 'ab')as log_f:
                log_f.write('{} {} run
'.format(time.strftime('%Y-%m-%d %X'), func.__name__).encode('utf-8'))
            return res
        return wrapper
    return msg_log


@path_log('record.log')
def f1():
    print('写入成功')
f1()

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

def get_while(msg):
    msg_iterator = msg.__iter__()
    while True:
        try:
            print(msg_iterator.__next__())
        except StopIteration:
            break
get_while('adsdnqwon')
get_while([1,4,5,6,3])
get_while((1,2,3))
get_while({'1':1,'2':2})
get_while({1,2,3,4,5,6,7,8})
with open('db.txt', 'rb')as f:
    get_while(f)

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

def my_range(start,stop,step=1):
    while start < stop:
        yield start
        start+=step
for n in my_range(1,6,3):
    print(n)
原文地址:https://www.cnblogs.com/Lance-WJ/p/12561145.html