# 一:编写函数,(函数执行的时间是随机的)
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装饰器作业的更多相关文章

  1. Day 11 函数名,闭包,装饰器. +作业

    '''一.函数名.def func(): print(5555)print(func)#输出结果 <function func at 0x026B5E88> 打印函数地址. # 1. 函数 ...

  2. Python 迭代器&生成器,装饰器,递归,算法基础:二分查找、二维数组转换,正则表达式,作业:计算器开发

    本节大纲 迭代器&生成器 装饰器  基本装饰器 多参数装饰器 递归 算法基础:二分查找.二维数组转换 正则表达式 常用模块学习 作业:计算器开发 实现加减乘除及拓号优先级解析 用户输入 1 - ...

  3. Python之路第一课Day4--随堂笔记(迭代生成装饰器)

    上节回顾: 1.集合 a.关系测试 b.去重 2.文件操作及编码 3.函数 4.局部变量和全局变量 上节回顾 本节课内容: 1.迭代器生成器 2.装饰器 3.json pickle数据序列化 4.软件 ...

  4. Python_Day_5装饰器、字符串格式化、序列化、内置模块、生成器、迭代器之篇

    一.装饰器 为什么要用装饰器??? 在实际的开发环境中应遵循开发封闭原则,虽然在这个原则是用的面向对象开发,但也适用于函数式编程,简单地说,它规定已经实现的功能代码不是允许修改的,但是可以被扩展: 封 ...

  5. Day04 - Python 迭代器、装饰器、软件开发规范

    1. 列表生成式 实现对列表中每个数值都加一 第一种,使用for循环,取列表中的值,值加一后,添加到一空列表中,并将新列表赋值给原列表 >>> a = [0, 1, 2, 3, 4, ...

  6. Day4 - Python基础4 迭代器、装饰器、软件开发规范

    Python之路,Day4 - Python基础4 (new版)   本节内容 迭代器&生成器 装饰器 Json & pickle 数据序列化 软件目录结构规范 作业:ATM项目开发 ...

  7. python-Day4-迭代器-yield异步处理--装饰器--斐波那契--递归--二分算法--二维数组旋转90度--正则表达式

    本节大纲 迭代器&生成器 装饰器  基本装饰器 多参数装饰器 递归 算法基础:二分查找.二维数组转换 正则表达式 常用模块学习 作业:计算器开发 实现加减乘除及拓号优先级解析 用户输入 1 - ...

  8. Python学习笔记——基础篇【第四周】——迭代器&生成器、装饰器、递归、算法、正则表达式

    目录 1.迭代器&生成器 2.装饰器 a.基本装饰器 b.多参数装饰器 3.递归 4.算法基础:二分查找.二维数组转换 5.正则表达式 6.常用模块学习 #作业:计算器开发 a.实现加减成熟及 ...

  9. python之路第五篇之装饰器:(进阶篇)

    装饰器: 学前必备知识: def f1(): print "f1" f1() #表示函数执行 f1 #表示函数,指向内存地址 f1 = lambda x: x + 1 f1() # ...

随机推荐

  1. nginx php-fpm安装手记

    首先下载nginx,nginx下载地址:http://www.nginx.org/download/nginx-0.8.53.tar.gz[root@winsyk ~]# mkdir -p /usr/ ...

  2. jquery mobile demo

    <!DOCTYPE html> <html> <head> <title>jQuery Mobile Demo</title> <me ...

  3. Unity3D和网页数据交互的基本原理

    简介: 1.Unity3D的游戏引擎是和编辑器集成在一起的,所有它也是一个制作/开发平台. 2.Unity3D是使用JavaScript.C#作为核心脚本语言来驱动事个游戏引擎. 3.平台可以发布Ex ...

  4. 关于TextView的一些初步解说

    Android里面的textview是一个相当重要的类.相信做安卓的开发人员在每一个应用里面都一定用到了它,而且它也是Button,EditTextView等子控件的父类. 对于View的流程:mea ...

  5. linux 知识点拾遗

    文件名称 在 Linux 底下,每个档案或文件夹的文件名称最长能够到达 255 的字符,加上完整路径时,最长可达 4096 个字符; 因为 Linux 在文字接口下的一些指令操作关系,一般来说,您在设 ...

  6. cobbler 修改 distro_signatures.json

    edit file in /var/lib/cobbler/distro_signatures.json and restart cobblerd service 转自: https://lists. ...

  7. poj 1419(图的着色问题,搜索)

    题目链接:http://poj.org/problem?id=1419 思路:只怪数据太弱!直接爆搜,按顺序搜索即可. #include<iostream> #include<cst ...

  8. python入门(三):分支、循环、函数

    1.分支 if循环格式:if condition_1: statement_block_1elif condition_2: statement_block_2else: statement_bloc ...

  9. 如何使用C#操作WinAPI

    Windows API是对Windows操作系统的API函数,在C#中调用Windows API的实质是托管代码对非托管代码的调用. 主要使用的格式就是: using System.Runtime.I ...

  10. python 之 多进程

    阅读目录 1. Process 2. Lock 3. Semaphore 4. Event 5. Queue 6. Pipe 7. Pool 序. multiprocessingpython中的多线程 ...