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 ...
随机推荐
- Linux中GitLab的部署
1.版本控制介绍 版本控制最主要的功能就是追踪文件的变更.它将什么时候.什么人更改了文件的什么内容等信息忠实地了记录下来.每一次文件的改变,文件的版本号都将增加.除了记录版本变更外,版本控制的另一 ...
- String 类中常用方法
序号 方法定义 类型 描述 1 public String(char[] value) 构造 直接将一个字符数组变为一个字符串 2 public String(char[] value,int off ...
- iOS视频随笔(一)
实例化对象init [AFNetworkActivityIndicatiorManager shareManager].enable = Yes; //开启网络请求指示 scrollView.cont ...
- numpy中数组(矩阵)的乘法
我们知道在处理数据的时候,使用矩阵间的运算将会是方便直观的.matlab有先天的优势,算矩阵是它的专长.当然我们用python,经常要用到的可能是numpy这个强大的库. 矩阵有两种乘法,点乘和对应项 ...
- Android学习笔记Tab代替ActionBar做的顶部导航
1.先准备5个Fragement作为标签页 package com.lzp.youdaotab; import android.os.Bundle; import android.view.Layou ...
- rust 函数-生命周期
记录一下自己理解的生命周期. 每个变量都有自己的生命周期. 在c++里生命周期好比作用域, 小的作用域的可以使用大作用域的变量. 如果把这里的每个作用域取个名,那么就相当于rust里的生命周期注解. ...
- cc26a_demo-CppPrimer_动态绑定_多态-代码示范
//多态性 //从派生类到基类的转换 //引用或者指针既可以指向基类对象,也可以指向派生类对象 //只有通过引用或者指针调用虚函数才会发生动态绑定. //为什么定义虚的函数?可 ...
- 关于数据库客户端navicat创建新连接失败的问题
如图是navicat创建新连接的截图: 我就有一个疑问了,主机填localhost或者127.0.0.1都是本机,自然是可以连接成功的,那如果填本机的IP地址会怎样呢? 如下图,出现了报错: 说我的访 ...
- c++数字转化为字符串、字符串转换为数字
char ch[20]; int i =1; int j = 2; char *p = "34567"; 数字装换为字符串 sprintf(ch , "%d,%d&quo ...
- JavaScript基础对象创建模式之对象的常量(028)
虽然许多编程语言提供了const关键字来支持常量的声明,但JavaScript里没有表示常量的语义.我们可以用全大写的方式来声明变量,表明它实际上是个常量: Math.PI; // 3.1415926 ...