day4 装饰器


import random,time
import sys
import urllib.request
import os

'''一:编写函数,(函数执行的时间是随机的)'''

# def func():
# time.sleep(random.randrange(1,3))
# print(f"此函数{sys._getframe().f_code.co_name}的执行时间为{random.randrange(1,3)}s")
# func()

'''二:编写装饰器,为函数加上统计时间的功能'''
# def Time_get(func):
# def wrepper():
# stater=time.time()
# func()
# stop=time.time()
# print((">>>>>>当前函数的统计时间是%s"%(stop-stater)))
# # return res
# return wrepper
# @Time_get
# def func():
# time.sleep(2)
# print(">>>>func")
# func()

'''三:编写装饰器,为函数加上认证的功能'''
# def auth(func):
# def wrapper(*args,**kwargs):
# user = input("请输入您的名字")
# pwd = input("请输入您的密码")
# if user=="egon" and pwd=="123":
# print("succes>>>")
# func(user,*args,**kwargs)
# # return res
# else:
# print("用户名或密码错误")
# return wrapper
# @auth
# def login(user):
# print("欢迎您的到来%s"%user)
# login()


'''
四:作业4:
# 编写装饰器,为多个函数加上认证的功能(用户的账号密码来源于文件),
# 要求登录成功一次,后续的函数都无需再输入用户名和密码
# 注意:从文件中读出字符串形式的字典,可以用eval('{"name":"egon","password":"123"}')转成字典格式
'''
# msg=False
# def auth(func):
# def wrapper(*args,**kwargs):
# global msg
# if msg:
# ret=func(*args,**kwargs)
# retutn ret

# else:
# with open("test.txt",mode='rt',encoding="utf-8")as f:
# for line in f.readlines():
# dit=eval(line)
# user = input("请输入您的名字")
# pwd = input("请输入您的密码")
# if user== dit["name"] and pwd==dit["password"]:
# print("succes>>>")
# ret=func(*args,**kwargs)
# msg=True
# return ret
# print("login error")
# return wrapper
# @auth
# def login(user):
# print("欢迎您的到来%s"%user)
# login("egon")
# @auth
# def login1(user):
# print("欢迎您的到来%s"%user)
# login("egon")
'''
作业5:
编写装饰器,为多个函数加上认证功能,要求登录成功一次,在超时时间内无需重复登录,
超过了超时时间,则必须重新登录
'''
# msg={"ely":False,"times":None}
# def auth(func):
# def wrapper(*args,**kwargs):
# global msg
# if msg["ely"] and (time.time()-msg["times"])<5:
# ret=func(*args,**kwargs)
# return ret
# else:
# with open("test.txt",mode='rt',encoding="utf-8")as f:
# for line in f.readlines():
# dit=eval(line)
# user = input("请输入您的名字")
# pwd = input("请输入您的密码")
# if user== dit["name"] and pwd==dit["password"]:
# print("succes>>>")
# ret=func(*args,**kwargs)
# msg["times"] = time.time()
# msg["ely"]=True
# return ret
# print("login error")
# return wrapper
# @auth
# def login(user):
# print("欢迎您的到来%s"%user)
# login("egon")
# time.sleep(6)
# @auth
# def login1(user):
# print("欢迎您的到来%s"%user)
# login("egon")
'''
作业6:
编写下载网页内容的函数,要求功能是:用户传入一个url,函数返回下载页面的结果
作业7:
为作业6编写装饰器,实现缓存网页内容的功能:
具体:实现下载的页面存放于文件中,如果文件内有值(文件大小不为0),就优先从文件中读取网页内容,否则,就去下载,然后存到文件中
'''
# def Url_Get(func):
# def inner(*args,**kwargs):
# if os.path.getsize("test.txt"):
# with open("test.txt",mode="rt",encoding="utf-8")as f:
# f=f.read()
# return f
# else:
# with open('test.txt',mode="wt",encoding="utf-8")as w:
# ret=func(*args,**kwargs)
# w.write(ret)
# return ret,(">>>>>>>>>")
# return inner
# @Url_Get
# def url_get(url):
# ret=urllib.request.urlopen(url).read()
# return ret
# u=url_get("http://www.baidu.com" )
# print(u)
#
'''
作业8:
制作一个函数字典的操作,在文件开头声明一个空字典,然后在每个函数前加上装饰器,完成自动添加到字典的操作
'''
# from functools import wraps
# def dit_add(func):
# # @wraps
# def wrepper(*args,**kwargs):
# dit[func.__name__]=func
# ret=func(*args,**kwargs)
# return ret
# return wrepper
# @dit_add
# def func1():
# print("succeed>>>>1")
# @dit_add
# def func2():
# print("succeed>>>>2")
# dit={}
# func1()
# func2()
# print(dit)

'''
作业9:
编写日志装饰器,实现功能如:一旦函数f1执行,则将消息2017-07-21 11:12:11 f1 run写入到日志文件中,日志文件路径可以指定
注意:时间格式的获取
import time
time.strftime()
'''
# def log_add(func):
# def wrepper(*args,**kwargs):
# with open("test.txt",mode='a',encoding="utf-8")as w:
# # w.seek(0,2)
# ret = func(*args, **kwargs)
# w.write(ret+" ")
# return ret
# return wrepper
# @log_add
# def log():
# tim="run %s 执行了 %s"%(time.strftime('%Y-%m-%d %X'),sys._getframe().f_code.co_name)
# return tim
# log()
原文地址:https://www.cnblogs.com/ZhiXiaoBbai/p/13457878.html