• 装饰器习题一些基本的


    1、整理装饰器的形成过程,背诵装饰器的固定格式

    复制代码
    固定格式
    def wrapper(func): 2.传入函数值f
        def inner(*args, **kwargs):
            #执行函数前进行的操作
            ret = func(*args,**kwargs)  # 5.执行f()函数
            #执行函数后进行的操作
            return ret   # 6.返回一个值给函数调用者  inner函数名的id
        return inner   # 4.通过return把返回值给函数调用者  此时f = inner
    @wrapper  # 1.f = wrapper(f)执行wrapper函数
    def f():
        print(666)
    f() 3.执行inner函数 f() = inner()
    
    注意:return用法 
    1.函数遇到return时函数体结束
    2.如果return后面跟上函数名则返回函数名在内存中的id
    3.如果return后面跟上其他字符则返回其本身
    复制代码

    2、编写装饰器,在每次执行被装饰函数之前打印一句’每次执行被装饰函数之前都得先经过这里,这里根据需求添加代码

    按 Ctrl+C 复制代码
    按 Ctrl+C 复制代码

    3、编写装饰器,在每次执行被装饰函数之后打印一句’每次执行完被装饰函数之后都得先经过这里,这里根据需求添加代码

    复制代码
    def func1(f):
        def inner():
            f()
            print('每次执行被装饰函数之后都得先经过这里,这里根据需求添加代码')
        return inner
    
    
    @func1
    def func2():
        print('hello world')
    
    
    func2()
    复制代码

    4、编写装饰器,在每次执行被装饰函数之前让用户输入用户名,密码,给用户三次机会,登录成功之后,才能访问该函数.

    复制代码
    def func2(f):
        def innter():
            a = 1
    
            while a <= 3:
                username = input('请输入用户名')
                password = input('请输入密码')
                if username == 'jinyuan' and password == '123':
                    f()
                    break
                else:
                    print('账号密码错误你还有{}次机会'.format(3-a))
                    a += 1
                    continue
        return innter
    
    
    @func2
    def func1():
        print('登录成功')
    
    
    func1()
    复制代码

    5、编写装饰器,为多个函数加上认证的功能(用户的账号密码来源于文件,只支持单用户的账号密码,给用户三次机会),
      要求登录成功一次,后续的函数都无需再输入用户名和密码

    复制代码
    dic = {
        'name':None,
        'status' : False
    }
    
    def func1(f):
        def inner(*args,**kwargs):
            num = 0
            while num < 3:
                if dic['status']:
                    ret = f(*args,**kwargs)
                    return ret
                else:
                    username = input('请输入用户名')
                    password = input('请输入密码')
                    f1 = open('test.txt',encoding='utf-8')
                    for i in f1:
                        new_list = i.strip().split()
                        if username == new_list[0] and password == new_list[1]:
                            dic['status'] = True
                            break
                    else:
                        num += 1
                        print('输入用户名或密码错误还有{}次机会'.format(3-num))
                        continue
        return inner
    
    
    @func1
    def func4():
        print('登录成功')
    
    
    func4()
    复制代码

    6,给每个函数写一个记录日志的功能,
    功能要求:每一次调用函数之前,要将函数名称,时间节点记录到log的日志中。
    所需模块:
    import time
    struct_time = time.localtime()
    print(time.strftime("%Y-%m-%d %H:%M:%S",struct_time))

    复制代码
    import time
    def wapper(f):
        def inner(*args,**kwargs):
            struct_time = time.localtime()
            time_log = time.strftime("%Y-%m-%d %H:%M:%S",struct_time)
            f1 = open('log1.txt',encoding='utf-8',mode='a')
            f1.write(time_log+'	')
            f1.write(str(f)+'
    ')
            f(*args,**kwargs)
        return inner
    
    
    @wapper
    def func1(*args,**kwargs):
        print('hello world')
    
    
    func1('aa','bbb')
  • 相关阅读:
    android游戏开发框架libgdx的使用(十二)—TiledMap地图的使用
    android游戏开发框架libgdx的使用(十一)—Skin和UI配置文件的使用
    子句判断、启动强度和去模糊化AForge.NET框架的使用(三)
    分享从网上收集的一些游戏资源,以RPG类为主
    android游戏开发框架libgdx的使用(十六)—使用TexturePacker工具加快开发速度
    android游戏开发框架libgdx的使用(十三)—TiledMap中的角色和角色移动
    Ajax实现评论的顶和踩功能
    Jelastic支持java的PaaS
    真心好用的VS扩展NuGet
    分享几篇文章(PDF版)
  • 原文地址:https://www.cnblogs.com/dragonff/p/10120269.html
Copyright © 2020-2023  润新知