zoukankan      html  css  js  c++  java
  • python 3/24作业

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

    def auth(db_type = 'file'):
        def inner(func):
            def wrapper(*args, **kwargs):
                inp_name = input("请输入用户名:>>>").strip()
                inp_pwd = input("请输入密码:>>>").strip()
                if db_type == 'file':
                    with open('file.txt', 'r', encoding='utf-8') as f:
                        for line in f:
                            user, pwd, *_ = line.strip().split(':')
                            if inp_name == user and inp_pwd == pwd:
                                print('登录成功')
                                return func(*args, **kwargs)
                        else:
                            print('用户名密码错误')
                elif db_type == 'mysql':
                    func(*args, **kwargs)
                elif db_type == 'ldap':
                    func(*args, **kwargs)
                else:
                    print('该认证登录方式不存在')
            return wrapper
        return inner
    @auth(db_type='file')
    def index():
        print('welcome to index page')
    
    @auth(db_type='mysql')
    def mysql_login():
        print('from mysql认证')
    
    @auth(db_type='ldap')
    def ldap_login():
        print('from ldap认证')
    
    index()
    mysql_login()
    ldap_login()


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

    dic_menu_use={}
    def append_dic(count):
        def wrapper(func):
            global dic_menu_use
            dic_menu_use[count]=[func.__doc__,func]
        return wrapper
    
    @append_dic(0)
    def user_login():
        """登录"""
        print("登录功能")
    
    @append_dic(1)
    def user_re():
        """注册"""
        print("注册功能")
    
    @append_dic(2)
    def user_out():
        """退出"""
        print("退出功能")
    
    print(dic_menu_use)
    //执行结果
    {0: ['登录', <function user_login at 0x0000018BCE0137B8>], 1: ['注册', <function user_re at 0x0000018BCE0138C8>], 2: ['退出', <function user_out at 0x0000018BCE0136A8>]}

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

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

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

    #字符串循环迭代取值
    str="hello world"
    str_iter=str.__iter__()
    while True:
        try:
            print(next(str_iter))
        except StopIteration:
            break
    
    #列表循环迭代取值
    l=[1,2,3,4,5]
    l_iter=l.__iter__()
    while True:
        try:
            print(next(l_iter))
        except StopIteration:
            break
    
    #元组循环迭代取值
    t=(1,2,3,4,5)
    t_iter=t.__iter__()
    while True:
        try:
            print(next(t_iter))
        except StopIteration:
            break
    
    #字典循环迭代取值
    d={"name":"egon","age":18,"sex":"man"}
    d_iter=d.__iter__()
    while True:
        try:
            print(d[next(d_iter)])
        except StopIteration:
            break
    
    #集合循环迭代取值
    s={"egon",18,"man"}
    s_iter=s.__iter__()
    while True:
        try:
            print(next(s_iter))
        except StopIteration:
            break
    
    #文件对象循环迭代取值
    f=open("file.txt","r")
    f_iter=f.__iter__()
    while True:
        try:
            print(next(f_iter),end="")
        except StopIteration:
            break
    f.close()


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

    def my_range(start,end,step=1):
        while start < end:
            try:
                yield start
                start+=step
            except StopIteration:
                break
    res=my_range(0,10)
    for i in res:
        print(i)
    
    #执行结果
    0
    1
    2
    3
    4
    5
    6
    7
    8
    9
  • 相关阅读:
    eclipse快捷键
    go 中 var声明对比
    Post 中 Body 的 ContentType 用 Postman 举例
    MongoDB随笔(二) mongorestore恢复数据库
    MongoDB随笔(零) mongod配置 ...不断完善...会变得很长很长很长……
    MongoDB随笔(一)mac OSX下brew安装MongoDB
    mac OSX的 brew软件包管理器 相当于 centos下的yum
    2021-01-27 解决mac使用brew update更新无反应的问题(切换git地址)
    Ruby中实现module继承
    redmine问题集锦
  • 原文地址:https://www.cnblogs.com/baicai37/p/12559957.html
Copyright © 2011-2022 走看看