day17 作业
一、编写函数(函数执行的时间用time.sleep(n)模拟)
import time
def time_sleep(n):
    print("函数开始")
    time.sleep(n)
    print("函数结束")
time_sleep(1)
二、编写装饰器,为函数加上统计时间的功能
import time
def timmer(func):
    def outter(*args,**kwargs):
        start = time.time()
        func(*args,**kwargs)
        stop = time.time()
        print(stop - start)
    return outter
@timmer
def time_sleep(n):
    print("函数开始")
    time.sleep(n)
    print("函数结束")
time_sleep(1)
三、编写装饰器,为函数加上认证的功能
def login(func):
    """登录装饰器"""
    def wrapper(*args,**kwargs):
        name_inp = input("请输入你的用户名:")
        pwd_inp = input("请输入你的密码:")
        with open("a.txt","r",encoding="utf-8") as f:
            for line in f :
                name,password = line.strip().split(":")
                if name ==name_inp and password == pwd_inp:
                    print("登录成功")
                    func(*args,**kwargs)
                    return
            else:
                    print("输入错误")
    return wrapper
@login
def eat(n):
    """吃东西"""
    print(f"吃{n}吨屎")
eat(100)
四、编写装饰器,为多个函数加上认证的功能(用户的账号密码来源于文件),要求登录成功一次,后续的函数都无需再输入用户名和密码
注意:从文件中读出字符串形式的字典,可以用eval('{"name":"egon","password":"123"}')转成字典格式
is_login = False
def judge_login(login_user):
    def login(func):
        def wrapper(*args,**kwargs):
            if not login_user:
                name_inp = input("请输入你的用户名:")
                pwd_inp = input("请输入你的密码:")
                with open("a.txt","r",encoding="utf-8")as f :
                    for line in f:
                        name,pwd = line.strip().split(":")
                        if name == name_inp and pwd_inp == pwd:
                            print("登录成功")
                            func(*args,**kwargs)
                            global is_login
                            is_login = True
                            break
                    else:
                        print("登录失败")
            else:
                func(*args,**kwargs)
        return wrapper
    return login
@judge_login(is_login)
def eat_chicken(n):
    '''吃鸡腿'''
    print(f"吃{n}个鸡腿")
eat_chicken(1)
@judge_login(is_login)
def eat_chocolates(m):
    '''吃巧克力'''
    print(f"吃{m}个巧克力")
eat_chocolates(2)
五、编写装饰器,为多个函数加上认证功能,要求登录成功一次,在超时时间内无需重复登录,超过了超时时间,则必须重新登录
import time
user_list={"name" : None, "password":None ,"now":None,"timeout":5}
def login(func):
    def wrapper(*args,**kwargs):
        if user_list['name']:
            timeout = time.time() - user_list['timeout']
            if timeout < user_list['now']:
                return func(*args, **kwargs)
            else:
                print("已超时")
        name_inp = input("请输入你的用户名:")
        pwd_inp = input("请输入你的密码:")
        if name_inp == "hz" and pwd_inp == "123":
            print("登录成功")
            user_list["name"]=name_inp
            user_list["password"]=pwd_inp
            user_list["now"]=time.time()
            func(*args,**kwargs)
        else:
            print("登录失败")
    return wrapper
@login
def eat_chicken(n):
    '''吃鸡腿'''
    time.sleep(2)
    print(f"吃{n}个鸡腿")
eat_chicken(1)
@login
def eat_chocolates(m):
    '''吃巧克力'''
    print(f"吃{m}个巧克力")
    time.sleep(3)
eat_chocolates(2)
@login
def eat_pig(n):
    print(f"吃{n}头猪")
eat_pig(1000)
												
											day17 作业的更多相关文章
- 老男孩Day17作业:后台管理平台编辑表格
		
一.作业需求: 后台管理平台 ,编辑表格: 1. 非编辑模式: 可对每行进行选择: 反选: 取消选择 2. 编辑模式: 进入编辑模式时如果行被选中,则被选中的行万变为可编辑状态,未选中的不改变 退出编 ...
 - python基础一 day17 作业
		
# 3.用map来处理字符串列表,把列表中所有人都变成sb,比方alex_sbname=['alex','wupeiqi','yuanhao','nezha']# def func(item):# r ...
 - Day17作业及默写
		
正则表达式练习 1.匹配一篇英文文章的标题 类似 The Voice Of China ([A-Z][a-z]*)( [A-Z][a-z]*)* 2.匹配一个网址 https://www.baidu. ...
 - day17作业
		
1.java.util 2.队列先进先出,栈堆先进后出 3.链表 4.LinkedList 5.TreeSet 6.Comparable 7.Map 8.next() 1.AC 2.A ...
 - 【转】django 正则URL 匹配
		
django 正则URL 匹配 转自:https://www.cnblogs.com/chenkeven/articles/9305260.html 一.引子 在day17 作业中,我们查看主机详细 ...
 - python27期day17:re、logging日志模块、作业。
		
1.re: 正则就是用一些具有特殊含义的符号组合到一起(称为正则表达式)来描述字符或者字符串的方法.或者说:正则就是用来描述一类事物的规则.(在Python中)它内嵌在Python中,并通过 re 模 ...
 - python 作业
		
Linux day01 计算机硬件知识整理 作业要求:整理博客,内容如下 编程语言的作用及与操作系统和硬件的关系 应用程序->操作系统->硬件 cpu->内存->磁盘 cpu与 ...
 - python10作业思路及源码:类Fabric主机管理程序开发(仅供参考)
		
类Fabric主机管理程序开发 一,作业要求 1, 运行程序列出主机组或者主机列表(已完成) 2,选择指定主机或主机组(已完成) 3,选择主机或主机组传送文件(上传/下载)(已完成) 4,充分使用多线 ...
 - SQLServer2005创建定时作业任务
		
SQLServer定时作业任务:即数据库自动按照定时执行的作业任务,具有周期性不需要人工干预的特点 创建步骤:(使用最高权限的账户登录--sa) 一.启动SQL Server代理(SQL Server ...
 
随机推荐
- Codeblocks 解决界面模糊的方法
			
之前用16.01不愿意升17.12的原因就是升级后界面变得非常模糊感觉很难看,找了个方法把这个问题解决了,这个方法能解决绝大多数软件打开后界面模糊的问题 (DEV模糊也能解决). 1.安装软件后桌面会 ...
 - 数据处理一条龙!这15个Python库不可不知
			
如果你是一名数据科学家或数据分析师,或者只是对这一行业感兴趣,那下文中这些广受欢迎且非常实用的Python库你一定得知道. 从数据收集.清理转化,到数据可视化.图像识别和网页相关,这15个Python ...
 - RocketMQ系列(六)批量发送与过滤
			
今天我们再来看看RocketMQ的另外两个小功能,消息的批量发送和过滤.这两个小功能提升了我们使用RocketMQ的效率. 批量发送 以前我们发送消息的时候,都是一个一个的发送,这样效率比较低下.能不 ...
 - controlfile的情景恢复
			
控制文件测试 百度百科:控制文件(Control File)是Oracle的物理文件之一,它记录了数据库的名字.数据文件的位置等信息.控制文件的重要性在于,一旦控制文件损坏,数据库将会宕机.如果没有数 ...
 - cb42a_c++_STL_算法_替换_replace
			
cb42a_c++_STL_算法_替换_replacereplace(b,e,ov,nv),ov,old value, nv,new valuereplace_if(b,e,p,v) 根据p的条件,全 ...
 - Java并发编程-Unsafe实现原理与Unsafe应用解析
			
前言 Unsafe是位于sun.misc包下的一个类,主要提供一些用于执行低级别.不安全操作的方法,如直接访问系统内存资源.自主管理内存资源等,这些方法在提升Java运行效率.增强Java语言底层资源 ...
 - PHP利用FTP上传文件连接超时之开启被动模式解决方法
			
初始代码: <?php $conn = ftp_connect("localhost") or die("Could not connect"); ftp ...
 - Maven的pom文件依赖提示 ojdbc6  Missing artifact,需要手动下载并导入maven参考
			
eg: 需要 ojdbc6.jar 的下载地址 https://www.oracle.com/database/technologies/jdbcdriver-ucp-downloads.html c ...
 - React实战教程之从零开始手把手教你使用 React 最新特性Hooks API 打造一款计算机知识测验App
			
项目演示地址 项目演示地址 项目代码结构 前言 React 框架的优雅不言而喻,组件化的编程思想使得React框架开发的项目代码简洁,易懂,但早期 React 类组件的写法略显繁琐.React Hoo ...
 - Jmeter系列(32)- 详解 CSV 数据文件设置
			
如果你想从头学习Jmeter,可以看看这个系列的文章哦 https://www.cnblogs.com/poloyy/category/1746599.html 了解一哈什么是 CSV 文件 为了实现 ...