zoukankan      html  css  js  c++  java
  • 装饰器习题一些基本的

    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')
  • 相关阅读:
    swift 函数
    Javascript中的apply与call详解
    SQL语句中----删除表数据drop、truncate和delete的用法
    jquery对象和DOM对象转换
    js正则函数match、exec、test、search、replace、split使用介绍集合
    JS中类或对象的定义说明
    SQL PROMPT5.3.4.1的一些设置选项
    jQuery 遍历函数
    前端开发面试题
    SQLServer中ISNULL和CONVERT函数
  • 原文地址:https://www.cnblogs.com/dragonff/p/10120269.html
Copyright © 2011-2022 走看看