zoukankan      html  css  js  c++  java
  • emmm......就当练习了系列14


    1、编写课上讲解的有参装饰器

    def auth(driver='file'):
    def outter(func):
    def wrapper(*args, **kwargs):
    name = input("user: ")
    pwd = input("pwd: ")

    if driver == 'file':
    if name == 'lucky' and pwd == '233':
    print('login successful')
    res = func(*args, **kwargs)
    return res
    elif driver == 'ldap':
    print('ldap')
    return wrapper
    return outter

    @auth(driver='file')
    def foo(name):
    print(name)

    foo('lucky')


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

    route_dic={}

    def make_route(name):
    def deco(func):
    route_dic[name] = func
    return deco
    @make_route('select')
    def func1():
    print('select')

    @make_route('insert')
    def func2():
    print('insert')

    @make_route('update')
    def func3():
    print('update')

    @make_route('delete')
    def func4():
    print('delete')

    print(route_dic)


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

    import time
    import os

    def logger(logfile):
    def deco(func):
    if not os.path.exists(logfile):
    with open(logfile, 'w'):
    pass

    def wrapper(*args, **kwargs):
    res = func(*args, **kwargs)
    with open(logfile, 'a', encoding='utf-8') as f:
    f.write('%s %s run ' % (time.strftime('%Y-%m-%d %X'), func.__name__))
    return res
    return wrapper
    return deco

    @logger(logfile='lucky.log')
    def index():
    print('index')

    index()



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

    # 字符串
    str = '嘿嘿嘿heiheihei'
    str_iterator = str.__iter__()
    while True:
    try:
    print(str_iterator.__next__())
    except StopIteration:
    break

    # 列表:
    l = [1, 2, 3, 4, 5]
    l_iterator = l.__iter__()
    while True:
    try:
    print(l_iterator.__next__())
    except StopIteration:
    break

    # 元组:
    tup = (1, 2, 3)
    tup_iterator = tup.__iter__()
    while True:
    try:
    print(tup_iterator.__next__())
    except StopIteration:
    break

    # 字典:
    dic = {'egon': 666, 'lucky': 233, 'alex': 123}
    dic_iterator = dic.__iter__()
    while True:
    try:
    key = next(dic_iterator)
    print(dic[key])
    except StopIteration:
    break

    # 集合
    set = {1, 2, 3}
    set_iterator = set.__iter__()
    while True:
    try:
    print(set_iterator.__next__())
    except StopIteration:
    break

    # 文件对象
    with open('a.txt', mode='r', encoding='utf-8')as f:
    f_file = f.readline()
    a_file = f_file.__iter__()
    while True:
    try:
    print(a_file.__next__())
    except StopIteration:
    break



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

    def my_range(start, stop, step=1):
    while start < stop:
    yield start
    start += step

    obj = my_range(1,7,2)
    print(next(obj))
    print(next(obj))
    print(next(obj))
    print(next(obj)) # StopIteration报错!

    ====================本周选做作业如下====================
    编写小说阅读程序实现下属功能
    一:程序运行开始时显示
    0 账号注册
    1 充值功能
    2 阅读小说


    二: 针对文件db.txt,内容格式为:"用户名:密码:金额",完成下述功能
    2.1、账号注册
    2.2、充值功能

    三:文件story_class.txt存放类别与小说文件路径,如下,读出来后可用eval反解出字典
    {"0":{"0":["倚天屠狗记.txt",3],"1":["沙雕英雄转.txt",10]},"1":{"0":["令人羞耻的爱.txt",6],"1":["二狗的妻子与大草原的故事.txt",5]},}

    3.1、用户登录成功后显示如下内容,根据用户选择,显示对应品类的小说编号、小说名字、以及小说的价格
    """
    0 玄幻武侠
    1 都市爱情
    2 高效养猪36技
    """

    3.2、用户输入具体的小说编号,提示是否付费,用户输入y确定后,扣费并显示小说内容,如果余额不足则提示余额不足

    四:为功能2.2、3.1、3.2编写认证功能装饰器,要求必须登录后才能执行操作

    五:为功能2.2、3.2编写记录日志的装饰器,日志格式为:"时间 用户名 操作(充值or消费) 金额"

     

    # 附加:
    # 可以拓展作者模块,作者可以上传自己的作品

     

     

  • 相关阅读:
    Win7 64位 php-5.5.13+Apache 2.4.9+mysql-5.6.19 配置
    C# .NET 使用第三方类库DotNetZip解压/压缩Zip rar文件
    64位window7,php5.5.10 +IIS7 配置
    eclipse下编译openfire3.9.1源码
    asp.net 解决IE11下 From身份验证失效问题
    MySQL 数据类型 详解
    ASP.NET安全
    Microsoft Anti-Cross Site Scripting Library V4.2 下载地址
    Entityframework Core去掉外键
    VS2019发布Docker实践
  • 原文地址:https://www.cnblogs.com/lucky-cat233/p/12560246.html
Copyright © 2011-2022 走看看