zoukankan      html  css  js  c++  java
  • 作业15

    作业15

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

    def auth(db_type):
        def deco(func):
            def wrapper(*args, **kwargs):
                name = input("请输入用户名:")
                password = input("请输入密码:")
                if db_type == "file":
                    print("基于file验证(open,for line in f)")
                    with open("db.txt", "r", encoding="utf-8") as f:
                        for line in f:
                            user, pwd = line.strip().split(":")
                            if user == name and pwd == password:
                                print("登陆成功")
                                res = func(*args, **kwargs)
                                return res
                        else:
                            print("账号名或密码错误")
                elif db_type == "mysql":
                    print("基于mysql验证")
                elif db_type == "ldap":
                    print("基于ldap验证")
                else:
                    print("不支持该类型")
    
            return wrapper
    
        return deco
    
    
    @auth("file")
    def index():
        print("欢迎到index页面")
    index()
    
    @auth("mysql")
    def index():
        print("欢迎到index页面")
    index()
    
    @auth("ldap")
    def index():
        print("欢迎到index页面")
    index()
    

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

    # 效果:
    # func_dic = {
    #     "0": ["退出", exit],
    #     "1": ["登录", login],
    #     "2": ["注册", logon],
    #     "3": ["提现", with_draw],
    #     "4": ["查询余额", check_balance],
    #     "5": ["转账", transfer]
    # }
    
    func_dict={}
    def func_dic_gen(func):
        def wrapper(*args,**kwargs):
            for value in func_dict.values():
                if func.__name__ in value:
                     break
            else:
                count = str(len(func_dict))
                func_dict[count]=["{}".format(func.__name__), func]
            res = func(*args,**kwargs)
            return res
        return wrapper
    @func_dic_gen
    def index(x, y):
        print('index->>%s:%s' % (x, y))
    @func_dic_gen
    def home(name):
        print('home->>%s' % name)
    @func_dic_gen
    def transfer():
        print('transfer')
    
    
    index(1,2)
    home("wu")
    transfer()
    print(func_dict)
    
    

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

    注意:时间格式的获取
    import time
    time.strftime('%Y-%m-%d %X')

    import time
    
    
    def log(func):
        def wrapper(*args, **kwargs):
            res = func(*args, **kwargs)
            func_time = time.strftime('%Y-%m-%d %X')
            print(func_time)
            with open("log.txt", "a", encoding="utf-8") as f:
                f.write("{} {} run
    ".format(func_time, func.__name__))
            return res
    
        return wrapper
    
    
    @log
    def f1():
        print("f1已执行")
    
    
    f1()
    
    

    4、基于迭代器的方式,用while循环迭代取值

    字符串、列表、元组、字典、集合、文件对象

    def my_for(obj):
        obj_iter = obj.__iter__()
        while 1:
            try:
                print(obj_iter.__next__(), end=" ")
            except StopIteration:
                print("")
                break
    
    
    my_for("wqd1")
    my_for([1, 2, 4, 5])
    my_for({1, 2, 4, 5})
    my_for((1, 2, 4, 5))
    my_for({"name": 1, "age": 2, "sex": 4, "ga": 5})
    

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

    # print(range(1,7,2))   # range(1, 7, 2)    1,3,5
    def my_range(start,end,step=1):
        while start < end:
            yield start
            start += step
    # my = range(2,7)
    my = my_range(0,7)
    for i in my:
        print(i)
    

    1

  • 相关阅读:
    27. Remove Element
    列表变成字典
    1. Two Sum
    CVPR2019:What and How Well You Performed? A Multitask Learning Approach to Action Quality Assessment
    959. Regions Cut By Slashes
    118. Pascal's Triangle
    loj3117 IOI2017 接线 wiring 题解
    题解 NOI2019 序列
    题解 省选联考2020 组合数问题
    题解 Educational Codeforces Round 90 (Rated for Div. 2) (CF1373)
  • 原文地址:https://www.cnblogs.com/achai222/p/12559181.html
Copyright © 2011-2022 走看看