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

    作业:

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

    def auth(db_type):
        def deco(func):
            def wrapper(*args,**kwargs):
                name=input('请输入用户名:').strip()
                pwd=input('请输入密码:').strip()
    
                if db_type=='file':
                    print('基于文件验证')
                    if name=='tank'and pwd=='123':
                        res=func(*args,**kwargs)
                        return res
                    else:
                        print('账号或密码错误')
                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,3)
    home(tank)
    transfer()
    

    2:还记得我们用函数对象的概念,制作一个函数字典的操作吗,来来来,我们有更高大上的做法,在文件开头声明一个空字典,

    然后在每个函数前加上装饰器,完成自动添加到字典的操作

    dict_func={}
    def func_key(func_key):
        def deco(func):
            def inner(*args,**kwargs):
                if func_key==1:
                    print('1模式')
                    dict_func['1']=str(func)
                elif func_key==2:
                    print('2模式')
                    dict_func['2'] = str(func)
                elif func_key==0:
                    print('0模式')
                    dict_func['0'] = str(func)
                res = func(*args, **kwargs)
                return res
            return inner
        return deco
    
    @func_key(func_key=1)
    def register():
        pass
    @func_key(func_key=2)
    def login():
        pass
    @func_key(func_key=0)
    def exit():
        pass
    
    register()
    print(dict_func)
    login()
    print(dict_func)
    exit()
    print(dict_func)
    

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

    注意:时间格式的获取

    import time
    time.strftime('%Y-%m-%d %X')
    
    def outter(func):
    
        def wrapper(*args,**kwargs):
            res=func(*args,**kwargs)
            with open(r'C:UsersccfPycharmProjectsS14day18access.log', mode='a', encoding='utf-8') as f:
                f.seek(0, 2)
                f.write('{} {} run
    '.format(time.strftime('%Y-%m-%d %X'),func.__name__))
            return res
    
        return wrapper
    
    
    @outter
    def f1(x,y):
        print('大力出奇迹%s %s 号' %(x,y))
    
    f1(1,3)
    

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

    str1='hello'
    str1_iterator=str1.__iter__()
    while True:
        try:
            print(str1_iterator.__next__())
        except StopIteration:
            break
    
    print('====>')
    list1=['h','e','l','l','o']
    list1_iterator=list1.__iter__()
    while True:
        try:
            print(list1_iterator.__next__())
        except StopIteration:
            break
    
    print('====>')
    tuple1=('hello',['h','e','l','l','o'])
    tuple1_iterator=tuple1.__iter__()
    while True:
        try:
            print(tuple1_iterator.__next__())
        except StopIteration:
            break
    
    print('====>')
    dict1={'name':'egon','pwd':'123','balance':'250'}
    dict1_iterator=dict1.__iter__()
    while True:
        try:
            print(dict1_iterator.__next__())
        except StopIteration:
            break
    
    print('====>')
    set1={'h','e','l','l','o'}
    set1_iterator=set1.__iter__()
    while True:
        try:
            print(set1_iterator.__next__())
        except StopIteration:
            break
    
    print('====>')
    with open(r'C:UsersccfPycharmProjectsS14day18adb.txt',mode='rt',encoding='utf-8') as f:
        f_iterator=f.__iter__()
        while True:
            try:
                print(f_iterator.__next__())
            except StopIteration:
                break
    

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

    def my_range(start,stop,step):
    
        while start<stop:
            yield start
            start+=step
    
    
    for k in my_range(1,8,2):
        print(k)
    
  • 相关阅读:
    new Date在不同浏览器识别问题
    22. Generate Parentheses dfs填表
    迪杰斯特拉+优先队列实现
    1062 最简分数 (20 分)
    1091 N-自守数 (15 分)
    1054 求平均值 (20 分)
    1045 快速排序 (25 分)
    1086 就不告诉你 (15 分)
    1076 Wifi密码 (15 分)
    1081 检查密码 (15 分)
  • 原文地址:https://www.cnblogs.com/zuiyouyingde/p/12559505.html
Copyright © 2011-2022 走看看