一、编写函数(函数执行的时间用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 作业的更多相关文章

  1. 老男孩Day17作业:后台管理平台编辑表格

    一.作业需求: 后台管理平台 ,编辑表格: 1. 非编辑模式: 可对每行进行选择: 反选: 取消选择 2. 编辑模式: 进入编辑模式时如果行被选中,则被选中的行万变为可编辑状态,未选中的不改变 退出编 ...

  2. python基础一 day17 作业

    # 3.用map来处理字符串列表,把列表中所有人都变成sb,比方alex_sbname=['alex','wupeiqi','yuanhao','nezha']# def func(item):# r ...

  3. Day17作业及默写

    正则表达式练习 1.匹配一篇英文文章的标题 类似 The Voice Of China ([A-Z][a-z]*)( [A-Z][a-z]*)* 2.匹配一个网址 https://www.baidu. ...

  4. day17作业

    1.java.util  2.队列先进先出,栈堆先进后出   3.链表  4.LinkedList  5.TreeSet  6.Comparable  7.Map  8.next() 1.AC 2.A ...

  5. 【转】django 正则URL 匹配

    django 正则URL 匹配  转自:https://www.cnblogs.com/chenkeven/articles/9305260.html 一.引子 在day17 作业中,我们查看主机详细 ...

  6. python27期day17:re、logging日志模块、作业。

    1.re: 正则就是用一些具有特殊含义的符号组合到一起(称为正则表达式)来描述字符或者字符串的方法.或者说:正则就是用来描述一类事物的规则.(在Python中)它内嵌在Python中,并通过 re 模 ...

  7. python 作业

    Linux day01 计算机硬件知识整理 作业要求:整理博客,内容如下 编程语言的作用及与操作系统和硬件的关系 应用程序->操作系统->硬件 cpu->内存->磁盘 cpu与 ...

  8. python10作业思路及源码:类Fabric主机管理程序开发(仅供参考)

    类Fabric主机管理程序开发 一,作业要求 1, 运行程序列出主机组或者主机列表(已完成) 2,选择指定主机或主机组(已完成) 3,选择主机或主机组传送文件(上传/下载)(已完成) 4,充分使用多线 ...

  9. SQLServer2005创建定时作业任务

    SQLServer定时作业任务:即数据库自动按照定时执行的作业任务,具有周期性不需要人工干预的特点 创建步骤:(使用最高权限的账户登录--sa) 一.启动SQL Server代理(SQL Server ...

随机推荐

  1. win32 socket http 操作

    纯wininet 操作http关键代码如下: HINTERNET hNet = ::InternetOpen(_T("Test"), INTERNET_OPEN_TYPE_DIRE ...

  2. Swift Core Data 图片存储与读取

    1.首先推出选择拍照还是相册的alert,代码如下: UIAlertController *alert = [UIAlertController alertControllerWithTitle:ni ...

  3. pip环境变量配置

    找到python安装目录,进入C:\Users\EDZ\AppData\Local\Programs\Python\Python37-32\Scripts  下.添加此地址到path中 打开cmd 输 ...

  4. CAS(乐观锁)与ABA问题

    cas是什么 CAS 全称 compare and swap 或者compare and exchange  比较并且交换.用于在没有锁的情况下,多个线程对同一个值的更新. cas原理 例如,我们对一 ...

  5. 『图论』LCA 最近公共祖先

    概述篇 LCA (Least Common Ancestors) ,即最近公共祖先,是指这样的一个问题:在一棵有根树中,找出某两个节点 u 和 v 最近的公共祖先. LCA 可分为在线算法与离线算法 ...

  6. 【JMeter_06】JMeter逻辑控制器__If控制器<If Controller>

    If控制器<If Controller> 业务逻辑: 根据表达式的结果来决定是否执行控制器下的脚本内容,与编程语言中的if判断逻辑大致相同,表达式结果为布尔值 true或false; 当表 ...

  7. cb04a_c++_数据结构_STL_queue队列-一般用来做系统软件开发

    /*cb04a_c++_数据结构_STL_queue队列-一般用来做系统软件开发队列(只能两端数据)与堆栈(只能一端操作数据)都没有迭代器.,队列:FIFO先进先出自适应容器(容器适配器)栈适配器ST ...

  8. Jenkins中agent的使用

    [前言] 很多小伙伴都已经会搭建Jenkins环境了,都想要用Jenkins来运行自动化接口,可我们的Jenkins在linux服务器上.服务器上默认的python包是2.6的这样不是很好,那么这边就 ...

  9. JavaWeb网上图书商城完整项目--21.用户模块各层相关类的创建

    1.现在要为user用户模块创建类 用户模块功能包括:注册.激活.登录.退出.修改密码. User类对照着t_user表来写即可.我们要保证User类的属性名称与t_user表的列名称完全相同. 我们 ...

  10. xutils工具上传日志文件--使用https并且带进度条显示

    package logback.ecmapplication.cetcs.com.myapplication; import android.app.Activity; import android. ...