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

    # 1、编写课上讲解的有参装饰器准备明天默写
    def muth(file_data):
        def login(func):
            def wrap(*args,**kwargs):
                if file_data == 'file':
                    dic = {}
                    username = input('请输入账号:').strip()
                    userpwd = input('请输入密码:').strip()
                    with open('a.txt',mode='r',encoding='utf-8') as f:
                        for i in f:
                            k,v = i.strip().split(':')
                            dic[k] = v
                        if username in dic and userpwd == dic[username]:
                            print('登陆成功')
                            res = func(*args,**kwargs)
                            return res
                        else:
                            print('账号密码错误')
                elif file_data == 'mysql':
                    print('使用mysql登录成功')
                    res = func(*args,**kwargs)
                    return res
                elif file_data == 'ldap':
                    print('使用ldap登录')
                    res = func(*args,**kwargs)
                    return res
                else:
                    print('登录方式不对')
            return wrap
        return login
    @muth('file')
    def foo():
        print('hello world')
    foo()
    @muth('mysql')
    def foo():
        print('hello world')
    foo()
    @muth('ldap')
    def foo():
        print('hello world')
    foo()
    @muth('a')
    def foo():
        print('hello world')
    foo()
    # 2:还记得我们用函数对象的概念,制作一个函数字典的操作吗,来来来,我们有更高大上的做法,在文件开头声明一个空字典,然后在每个函数前加上装饰器,完成自动添加到字典的操作
    dic = {}
    
    def make(ch):
        def wrap(func):
            def inner():
                dic[ch] = func()
                return dic[ch]
            return inner
        return wrap
    @make('yu')
    def select():
        return 123
    @make('egon')
    def update():
        return 456
    
    select()
    update()
    
    print(dic)
    # 3、 编写日志装饰器,实现功能如:一旦函数f1执行,则将消息2017-07-21 11:12:11 f1 run写入到日志文件中,日志文件路径可以指定
    # 注意:时间格式的获取
    # import time
    # time.strftime('%Y-%m-%d %X')
    import time
    def file(file_path):
        def make(func):
            def wrapper(*args,**kwargs):
                with open(file_path,mode='a+',encoding='utf-8') as f:
                    data_time = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time()))
                    f.write('{} {} run
    '.format(data_time,func.__name__))
                res = func(*args, **kwargs)
                return res
            return wrapper
        return make
    @file('b.txt')
    def f1():
        print(1)
    f1()
    # 4、基于迭代器的方式,用while循环迭代取值字符串、列表、元组、字典、集合、文件对象
    def data(info):
        res = iter(info)
        while True:
            try:
                print(next(res))
            except StopIteration:
                break
    data('123')
    data([1,2,3,4])
    data((1,2,3,4))
    data({1:2,3:4})
    data({1,2,3,4})
    with open('a.txt',mode='r',encoding='utf-8') as info:
        data(info)
    # 5、自定义迭代器实现range功能
    def my_range(start,stop,step):
        while start < stop:
            print(start)
            start += step
    my_range(1,9,3)
  • 相关阅读:
    强制重置管理员密码
    Leetcode-Wildcard Matching
    Leetcode-Merge Intervals
    Leetcode-Insert Interval
    Leetcode-Recover BST
    Leetcode-Validate BST
    Leetcode-Same Tree
    Leetcode-Symmetric Tree
    Leetcode-Construct Binary Tree from inorder and postorder travesal
    Leetcode-Binary Tree Level Order Traversal II
  • 原文地址:https://www.cnblogs.com/yding/p/12569269.html
Copyright © 2011-2022 走看看