s5_day7装饰器作业
# 一:编写函数,(函数执行的时间是随机的)
import time
import random
# def foo():
# time.sleep(random.randrange(1,5))
# print('haha')
# foo()
# 二:编写装饰器,为函数加上统计时间的功能
# def timmer(func):
# def wrapper():
# start_time=time.time()
# func()
# stop_time=time.time()
# print('run time is %s'%(stop_time-start_time))
# return wrapper
# @timmer
# def foo():
# time.sleep(random.randrange(1,5))
# print('haha')
# foo()
# 三:编写装饰器,为函数加上认证的功能
# def auth(func):
# def deco():
# name=input('name: ')
# pwd=input('password: ')
# if name=='egon' and pwd=='123':
# print('login successful')
# func()
# else:
# print('login erro')
# return deco
# @auth
# def foo():
# time.sleep(random.randrange(1,5))
# print('haha')
# foo()
# 四:编写装饰器,为多个函数加上认证的功能(用户的账号密码来源于文件),要求登录成功一次,后续的函数都无需再输入用户名和密码
# 注意:从文件中读出字符串形式的字典,可以用eval('{"name":"egon","password":"123"}')转成字典格式
# user_dic={
# 'egon':'123',
# 'alex':'alex3714',
# 'wupeiqi':'wu13',
# 'yuanhao':'123123'
# }
# with open('db.txt','w',encoding='utf-8') as f:
# f.write(str(user_dic))
# with open('db.txt','r',encoding='utf-8') as f:
# res=f.read()
# #print(res,type(res))#字符串类型
# user_dic=eval(res)
# #print(user_dic,type(user_dic))#字典类型
# db_path='db.txt'
# login_dic={
# 'user':None,
# 'status':False,
# }
# def auth(func):
# def wrapper(*args,**kwargs):
# if login_dic['user'] and login_dic['status']:
# res = func(*args, **kwargs)
# return res
# name=input('your name: ')
# password=input('your password: ')
# with open(db_path,'r',encoding='utf-8') as f:
# user_dic=eval(f.read())
# if name in user_dic and password == user_dic[name]:
# print('login ok')
# login_dic['user']=name
# login_dic['status']=True
# res=func(*args,**kwargs)
# return res
# else:
# print('login err')
# return wrapper
# @auth #auth(index)
# def index():
# print('welecome to index')
# @auth
# def home(name):
# print('welecome %s to home page' %name)
# index()
# home('egon')
# 五:编写下载网页内容的函数,要求功能是:用户传入一个url,函数返回下载页面的结果
# from urllib.request import urlopen
# def index(url):
# def get():
# return urlopen(url).read()
# return get
# python = index('https://www.python.org')
# print(python())
# 六:为题目五编写装饰器,实现缓存网页内容的功能:
# 具体:实现下载的页面存放于文件中,如果文件内有值(文件大小不为0),
# 就优先从文件中读取网页内容,否则,就去下载,然后存到文件中
# from urllib.request import urlopen
# import os
# cache_path=r'C:\Users\Administrator\PycharmProjects\python5期\day8\cache.txt'
# def make_cache(func):
# def wrapper(*args,**kwargs):
# if os.path.getsize(cache_path):
# #有缓存,文件不为空
# print('\033[45m=========>有缓存\033[0m')
# with open(cache_path,'rb') as f:
# res=f.read()
# else:
# res=func(*args,**kwargs) #下载
# with open(cache_path,'wb') as f: #制作缓存
# f.write(res)
# return res
# return wrapper
# @make_cache
# def get(url):
# return urlopen(url).read()
# print('================>first')
# print(get('https://www.python.org'))
# print('================>second')
# print(get('https://www.python.org'))
# print('================>third')
# print(get('https://www.python.org'))
# 七:还记得我们用函数对象的概念,制作一个函数字典的操作吗,
# 来来来,我们有更高大上的做法,在文件开头声明一个空字典,
# 然后在每个函数前加上装饰器,完成自动添加到字典的操作
# func_dic = {}
# def deco(key):
# def deco2(func):
# func_dic[key]=func
# return deco2
# @deco('f1')#@deco2 func1=deco2(func1)
# def func1():
# print("from f1")
# @deco('f2')
# def func2():
# print("from f2")
# @deco('f3')
# def func3():
# print("from f3")
# print(func_dic)
# while True:
# cmd=input('>>: ').strip()
# if cmd in func_dic:
# func_dic[cmd]()
s5_day7装饰器作业的更多相关文章
- Day 11 函数名,闭包,装饰器. +作业
'''一.函数名.def func(): print(5555)print(func)#输出结果 <function func at 0x026B5E88> 打印函数地址. # 1. 函数 ...
- Python 迭代器&生成器,装饰器,递归,算法基础:二分查找、二维数组转换,正则表达式,作业:计算器开发
本节大纲 迭代器&生成器 装饰器 基本装饰器 多参数装饰器 递归 算法基础:二分查找.二维数组转换 正则表达式 常用模块学习 作业:计算器开发 实现加减乘除及拓号优先级解析 用户输入 1 - ...
- Python之路第一课Day4--随堂笔记(迭代生成装饰器)
上节回顾: 1.集合 a.关系测试 b.去重 2.文件操作及编码 3.函数 4.局部变量和全局变量 上节回顾 本节课内容: 1.迭代器生成器 2.装饰器 3.json pickle数据序列化 4.软件 ...
- Python_Day_5装饰器、字符串格式化、序列化、内置模块、生成器、迭代器之篇
一.装饰器 为什么要用装饰器??? 在实际的开发环境中应遵循开发封闭原则,虽然在这个原则是用的面向对象开发,但也适用于函数式编程,简单地说,它规定已经实现的功能代码不是允许修改的,但是可以被扩展: 封 ...
- Day04 - Python 迭代器、装饰器、软件开发规范
1. 列表生成式 实现对列表中每个数值都加一 第一种,使用for循环,取列表中的值,值加一后,添加到一空列表中,并将新列表赋值给原列表 >>> a = [0, 1, 2, 3, 4, ...
- Day4 - Python基础4 迭代器、装饰器、软件开发规范
Python之路,Day4 - Python基础4 (new版) 本节内容 迭代器&生成器 装饰器 Json & pickle 数据序列化 软件目录结构规范 作业:ATM项目开发 ...
- python-Day4-迭代器-yield异步处理--装饰器--斐波那契--递归--二分算法--二维数组旋转90度--正则表达式
本节大纲 迭代器&生成器 装饰器 基本装饰器 多参数装饰器 递归 算法基础:二分查找.二维数组转换 正则表达式 常用模块学习 作业:计算器开发 实现加减乘除及拓号优先级解析 用户输入 1 - ...
- Python学习笔记——基础篇【第四周】——迭代器&生成器、装饰器、递归、算法、正则表达式
目录 1.迭代器&生成器 2.装饰器 a.基本装饰器 b.多参数装饰器 3.递归 4.算法基础:二分查找.二维数组转换 5.正则表达式 6.常用模块学习 #作业:计算器开发 a.实现加减成熟及 ...
- python之路第五篇之装饰器:(进阶篇)
装饰器: 学前必备知识: def f1(): print "f1" f1() #表示函数执行 f1 #表示函数,指向内存地址 f1 = lambda x: x + 1 f1() # ...
随机推荐
- mysql—触发器trigger
触发器(trigger):一种特殊的事物, 监视某种事物操作(insert/update/delete), 并触发相关操作(insert/update/delete). 触发器(trigger)创建4 ...
- 海康网络摄像机调用SDK解码Java版
两个回调函数: FRealDataCallBack 实现预览回调数据 DecCallBack 解码回调函数 在HCNetSDK.java补充相关函数和结构声明 //播放库函数声明,PlayCtrl.d ...
- Junit使用详解
http://junit.org/上详细介绍了Junit.JUnit is a simple framework to write repeatable tests. It is an instanc ...
- java web学习笔记-Servlet篇
Servlet基础 1.Servlet概述 JSP的前身就是Servlet.Servlet就是在服务器端运行的一段小程序.一个Servlet就是一个Java类,并且可以通过“请求-响应”编程模型来访问 ...
- UTF8转换为GB编码gb2312转换为utf-8
这个方法是用windows的字符集转换的,跟sybase 的unicode码表可能在某些符号上有差别,对于大部分字符来说,尤其是 汉字,应该不会有问题的,如果要求比较高的话,可以买sybase的 un ...
- Windows编程中回调函数的使用心得(MFC篇)
回调函数就是一个通过函数指针调用的函数.如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数.回调函数不是由该函数的实现方直接调用,而是在特定 ...
- MFC多国语言——资源DLL
此随笔中主要内容来自http://blog.csdn.net/china_hxx/article/details/10066655,原出处不详. 以下内容基于VC 6.0.要实现界面多语言化,必须要先 ...
- AndroidManifest.xml文件详解(activity)(四)
android:multiprocess 这个属性用于设置Activity的实例能否被加载到与启动它的那个组件所在的进程中,如果设置为true,则可以,否则不可以.默认值是false. 通常,一个新的 ...
- iOS 下载
#import "ViewController.h" @interface ViewController () @property (strong, nonatomic) NSMu ...
- Docker的初体验
这几天捣鼓了一下docker,是真的麻烦啊,网上资料比较杂乱,也很多英文,学起来挺多问题的 Docker下载 win10专业版:开启Hyper-V,下载并安装 docker-for-windows(但 ...