首页 > 其他分享 >3月01日课后总结

3月01日课后总结

时间:2023-03-01 21:14:07浏览次数:32  
标签:总结 index 01 outer 课后 time print return def

3/01课后总结

装饰器装饰器简易版本

def outer(func_name):
    # func_name = index
    def get_time():
        # 1. 在函数执行之前,要记录一下此时的时间
        start_time = time.time()
        # 2. 开始执行函数
        func_name()
        # 3. 函数执行完毕之后,再次记录此时的时间
        end_time = time.time()
        # 4. 统计函数的执行时间
        print('执行了%s秒' % (end_time - start_time))
    return get_time
index=outer(index) # get_time的内存地址
index()

装饰器解决参数问题

def outer(func_name):
    # func_name = index
    def get_time(*args, **kwargs):
        # 1. 在函数执行之前,要记录一下此时的时间
        start_time = time.time()
        # 2. 开始执行函数
        func_name(*args, **kwargs)
        # 3. 函数执行完毕之后,再次记录此时的时间
        end_time = time.time()
        # 4. 统计函数的执行时间
        print('执行了%s秒' % (end_time - start_time))
    return get_time
index = outer(index)  # get_time的内存地址
index()

解决返回值问题


def outer(func_name):
    # func_name = index
    def get_time(*args, **kwargs):
        # 1. 在函数执行之前,要记录一下此时的时间
        start_time = time.time()
        # 2. 开始执行函数
        res=func_name(*args, **kwargs)  # index()
        # 3. 函数执行完毕之后,再次记录此时的时间
        end_time = time.time()
        # 4. 统计函数的执行时间
        print('执行了%s秒' % (end_time - start_time))
        return res  # 才是真正的函数的返回结果
    return get_time
# index = outer(index)  # get_time的内存地址
# res=index()
# print(res)  # None

home=outer(home)
print(home())

课堂练习题1

# 写一个认证装饰器
# 定义一个index函数,让用户输入用户名和密码,如果输入正确,就执行index函数,否则不能执行函数

def outer(flag):
    # flag
    def config():
        x = input('请输入用户名')
        y = input('请输入密码')
        if x == '111' and y == '111':了,
            flag()
    return config


@outer
def index():
    print(123)


# index = outer(index)
index()

装饰器的固定模板

def outer(func):
    def inner(*args, **kwargs):
        #  此处为函数执行前需要添加的功能
        res=func(*args, **kwargs)
        #  此处为函数执行后需要添加的功能
        return res
    return inner

语法糖

@outer  # index=outer(index)
def index():
    print('from index')
index()

@outer  # home = outer(index)
def home():
    print('from home')
"""
    在需要装饰的函数前加@+装饰函数名
"""

多层语法糖

@login_auth # index=login_auth(get_time)
@outer  # get_time=outer(index)
def index():
    print('from index')
index()
"""
	在需要装饰的函数前加多个@+装饰函数名
	自上向下,最低层在最上层
	运行时,自下向上,从最下一个开始调用
"""

装饰器修复技术

from functools import wraps
def login_auth(func_name):
    # func_name = index
    @wraps(func_name)  # 修复技术是为了让被装饰对象不容易被察觉装饰了
    def auth():
        # 1. 让用户输入用户名和密码
        username = input('username:').strip()
        password = input('password:').strip()

        # 2. 要认证,判断用户名和密码是否正确
        if username == 'kevin' and password == '123':
            # 才是正常执行的函数
            res=func_name()
            return res
        else:
            print('认证失败,不能执行函数')
    return auth

@login_auth
def index():
    print(123)


help(index)
"""
    Help on function index in module __main__:
    此时就是已经被装饰过index()显示为index
    Help on function auth in module __main__:
	这是没有被装饰过的
"""

课堂练习题2

# 判断七句print执行顺序
def outter1(func1):
    print('加载了outter1')
    def wrapper1(*args, **kwargs):
        print('执行了wrapper1')
        res1 = func1(*args, **kwargs)
        return res1
    return wrapper1

def outter2(func2):
    print('加载了outter2')
    def wrapper2(*args, **kwargs):
        print('执行了wrapper2')
        res2 = func2(*args, **kwargs)
        return res2
    return wrapper2

def outter3(func3):
    print('加载了outter3')
    def wrapper3(*args, **kwargs):
        print('执行了wrapper3')
        res3 = func3(*args, **kwargs)
        return res3
    return wrapper3


@outter1
@outter2
@outter3
def index():
    print('from index')
'''
	自下向上去调用,然后可以采用函数递归的思想来思考结果
'''

有参装饰器

def outter(source_data,a,b,c,d,e,f, *args, **kwargs):
    source_data='file'
    def login_auth(func_name):
        # func_name = index
        def auth(*args, **kwargs):
            # 1. 让用户输入用户名和密码
            username = input('username:').strip()
            password = input('password:').strip()
    
            # 2. 要认证,判断用户名和密码是否正确
            if source_data == 'file':
                print('数据来源是文件')
            elif source_data=='mysql':
                print('数据来源是MySQL')
            elif source_data=='oracle':
                print('数据来源是oracle')
            else:
                print('认证失败,不能执行函数')
                
        return auth
    return login_auth


@outter('file',1,2,3,4,5,6,) # @login_auth
def index():
    print('from index')

标签:总结,index,01,outer,课后,time,print,return,def
From: https://www.cnblogs.com/juzixiong/p/17169775.html

相关文章

  • day01(2023.3.1)
    1、了解了Java运行机制jdk和jre和jvm的区别 2、下载安装jdk然后配置环境变量 并验证是否成功(1)百度收搜Jdk8(推荐),找到下载地址。(2)同意协议,下载电脑对应的版本。......
  • 2023/2/27每日总结
    以下为今日课上所写代码packageText;importjava.io.*;importjava.util.ArrayList;importjava.util.List;importjava.util.Scanner;/*关于文件导入并找出最长的接龙单......
  • C语言员工信息管理系统[2023-03-01]
    C语言员工信息管理系统[2023-03-01]物联网工程专业程序设计基础课程设计员工信息管理系统学院(系):信息与通信工程学院专业:物联网工程学生姓名:学......
  • SRTP_Log_20230301
    WorkingContent:1.第一个是参数1,第二个是噪声1,第三个是参数2,第四个是噪声2如果没加噪声(以下情况),所以照理来说噪声1和噪声2的量级应该分别比参数1和参数2小得多,现在看......
  • 每日总结
    android的修改密码在app里有修改个人密码功能,总体思路就是获取密码然后通过姓名修改,那么就需要原来的姓名和原来的密码在点击按钮之后,会跳转到输入新旧密码的判断界面,所......
  • P8631 [蓝桥杯 2015 国 AC] 切开字符串 题解
    P8631[蓝桥杯2015国AC]切开字符串题解前言看到这题没有人写题解,就打算写一篇。这也是蒟蒻的第一篇题解。前置知识\(manacher\),\(SA\)。如果不会可以转至mana......
  • C/C++职工工作量统计系统[2023-03-01]
    C/C++职工工作量统计系统[2023-03-01]题目17:职工工作量统计系统设计编写一个程序,该程序能输入职工工号、完成的产品数量、产品名称、产品种类,程序允许同一职工有多次输......
  • 两道区间DP题目总结
    CF1132F.CleartheString题目传送门题意:有一个字符串,每次可以删除一段连续的相同字母的子串,求删完的最小次数。做法一设\(f[l][r]\)表示\([l,r]\)删完的最小次......
  • 2023-03-01 react-native 实现 复制功能 @react-native-community/clipboard 报错:Type
    我的react-native(下称rn)版本为0.68,要实现这个功能主要用到rn的clipboard,在21年的时候他就已经提示clipboard会在未来的版本中上去掉,官方的建议是不要再从react-native引入,......
  • 美团前端二面经典react面试题总结
    React事件机制<divonClick={this.handleClick.bind(this)}>点我</div>React并不是将click事件绑定到了div的真实DOM上,而是在document处监听了所有的事件,当事件发生并......