zoukankan      html  css  js  c++  java
  • 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)
    
  • 相关阅读:
    18.9.22 noip模拟赛
    POJ 2299 Ultra-QuickSort
    美团2018年CodeM大赛-初赛B轮 B 配送(最短路)
    Wannafly挑战赛18 E 极差(线段树、单调栈)
    Foj 2299 Prefix(AC自动机、DP)
    求独立矩形个数
    Zoj 3777 Problem Arrangement
    Luogu 2444 [POI2000]病毒 & Zoj 3784
    [ZJOI2007]Hide 捉迷藏
    双联通分量学习笔记
  • 原文地址:https://www.cnblogs.com/Lance-WJ/p/12561145.html
Copyright © 2011-2022 走看看