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]()
时间: 2024-08-01 22:44:20

day7装饰器作业(最后一题待补充)的相关文章

python之闭包函数 装饰器 作业

一:编写函数,(函数执行的时间是随机的) import randomdef t(): time.sleep(random.randrange(1,3)) print('hello')二:编写装饰器,为函数加上统计时间的功能 import timeimport randomdef timebe(func): def wrapper(*args,**kwargs): start_time=time.time() res = func(*args, **kwargs) end_time=time.ti

python装饰器作业

# user_dic={'xiaohong':'123','xiaobai':'123','xiaohei':'123'} # with open('idpd.txt','w',encoding='utf-8') as f: # f.write(str(user_dic)) # with open('idpd.txt','r',encoding='utf-8') as f2: # read=f2.read() # print(read) # user_dic=eval(read) #将user_

装饰器作业

题目大概要求: 源代码: log_in_status=False def log_in(f): def g(): global log_in_status if log_in_status==False: type=input("请选择登陆类型:1京东2微信") if(type=='1'): a=open("jingdong.txt") a.seek(0,0) USERNAME=a.readline() PASSWORD=a.readline() username=

Python基础day-7[闭包,装饰器]

闭包: 首先说下闭包是什么? 闭包就是在函数内部定义的函数,包含对外部作用域的引用,但不包含全局作用域.因为函数的作用域在定义的时候就固定死了,所以闭包函数有自带作用域和延迟计算的特点. 闭包函数定义:如果一个内部函数,包含了对外部作用域的引用,但是不是包含全局作用域.那么这个函数就被认为是闭包函数.闭包函数可以使用".__closure__" 来查看闭包函数的属性.下面我们来看一个示例: def t(): money = 100 def s(): print(money) retur

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

本节大纲 迭代器&生成器 装饰器  基本装饰器 多参数装饰器 递归 算法基础:二分查找.二维数组转换 正则表达式 常用模块学习 作业:计算器开发 实现加减乘除及拓号优先级解析 用户输入 1 - 2 * ( (60-30 +(-40/5) * (9-2*5/3 + 7 /3*99/4*2998 +10 * 568/14 )) - (-4*3)/ (16-3*2) )等类似公式后,必须自己解析里面的(),+,-,*,/符号和公式,运算后得出结果,结果必须与真实的计算器所得出的结果一致 迭代器&

<每日一题>题目2:编写装饰器,为多个函数加上认证功能(用户账号和密码来源于文件)

这里做个最简单的账号密码验证,主要为了实现装饰器同时对多个函数起作用 1 FLAG = False #加一个变量防止多次登录验证 2 def wrapper(f): 3 def inner(*args,**kwargs): 4 '''登录程序''' 5 global FLAG #将FLAG变量设置成全局变量 6 if FLAG: 7 ret = f(*args, **kwargs) 8 return ret 9 else: 10 username = input('username:') 11

20181128(闭包函数,函数嵌套,名称空间,作用域,装饰器待补充)

一.函数对象 在面向对象的编程中 一切皆对象 具体的体现: 1.函数可以被引用 def bar():    print('from bar')?f=barf()输出结果为:from bar 2.函数可以作为函数的参数 def bar():    print('from bar')?def wrapper(func): #func=bar    func() #bar()?wrapper(bar)输出结果为:from bar 3.函数可以作为函数的返回值 def bar():    print('

NO.4:自学python之路------内置方法、装饰器、迭代器

引言 是时候开始新的Python学习了,最近要靠英语,可能不会周更,但是尽量吧. 正文 内置方法 Python提供给了使用者很多内置方法,可以便于编程使用.这里就来挑选其中大部分的内置方法进行解释其用途. abs() #求取绝对值,例子. a = -5 abs(a)#求绝对值 all() #迭代对象全为真,则返回Ture,否则返回False,例子. all([1,5,6])#True all([5,0,6])#False any() #与all类似,但是有真则返回Ture,全假返回False,例

Day4 - 迭代器&生成器、装饰器、Json & pickle 数据序列化、软件目录结构规范

---恢复内容开始--- 本节内容 迭代器&生成器 装饰器 Json & pickle 数据序列化 软件目录结构规范 作业:ATM项目开发 1.列表生成式,迭代器&生成器 列表生成式 需求:列表a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],要求把列表里的每个值加1 1 a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 2 b = [] 3 for i in a: 4 b.append(i+1) 5 a = b 6 print(a) 普通青