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() # ...
随机推荐
- Missing artifact javax.transaction:jta:jar:1.0.1B解决办法
maven库中缺少了这个jar,需要把这个jar安装到本地库中去. 1.下载包含此jar的zip包,地址: http://download.csdn.net/detail/spring123tt/68 ...
- tf命令总结
$/AutoBuild/WpfApp/WpfApp/MainWindow.xaml 发现tf workspaces /collection:http://192.168.175.117:8080/tf ...
- java.lang.IllegalArgumentException: SessionContext must be an HTTP compatible implementation.:模块化本地测试shiro的一些总结
项目由于是多模块的,所以,测试的时候我想现将shiro框架进行本地测试,然后再放入框架里面,但是这个困扰我了两天了都,其实我应该想到的,只是想多试试,最后还不如多想想 先说一下系统的基本情况,项目是多 ...
- 常用cms
最近,朋友要建站让我帮着推荐个好的CMS(内容管理系统),个人认为其实选择哪个CMS并不重要,除了对搜索引擎的亲好外,个人的使用操作习惯和对所选CMS系统的熟悉程度有很大关系. 这里为需要建站但又徘徊 ...
- 刚新建好的动态网站项目,创建jsp页面就报错
拿到刚刚可以运行的Eclipse,就马上想敲码了,但一创建项目之后再创建jsp页面就报错= =! 报错的内容大概为缺乏对应的jar包. 我们常用Tomcat为中间体,而他本身是带有开发jsp网站的对应 ...
- Linux下面 多线程死锁问题的调试
最近写服务,经常是单进程,多线程的,加了各种锁,很担心出现死锁问题,专门学习了一下死锁问题的诊断. 死锁 (deallocks): 是指两个或两个以上的进程(线程)在执行过程中,因争夺资源而造成的一种 ...
- 金典 SQL笔记(9)
page301-354其它解决方式 ---开窗函数 --測试数据及表 USE [NB] GO /****** 对象: Table [dbo].[T_Person2] 脚本日期: 08/14/2015 ...
- 【python】获取网页中中文内容并分词
# -*- coding: utf-8 -*- import urllib2 import re import time import jieba url="http://www.baidu ...
- Sort List[leetcode] 由归并排序的递归和循环,到本题的两种解法
归并排序能够有两种思路----top-down 和 bottom-up top-down: 递归实现,将数组分成两半.分别处理.再合并. 伪代码例如以下: split ( A[], l, r) { i ...
- 红黑树C++实现
1 /* 2 * rbtree.h 3 * 1. 每个节点是红色或者黑色 4 * 2. 根节点是黑色 5 * 3. 每个叶子节点是黑色(该叶子节点就空的节点) 6 * 4. 如果一个节点是红色,则它的 ...