zoukankan      html  css  js  c++  java
  • 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:UsersAdministratorPycharmProjectspython5期day8cache.txt'
    # def make_cache(func):
    #     def wrapper(*args,**kwargs):
    #         if os.path.getsize(cache_path):
    #             #有缓存,文件不为空
    #             print('33[45m=========>有缓存33[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]()
  • 相关阅读:
    0593. Valid Square (M)
    0832. Flipping an Image (E)
    1026. Maximum Difference Between Node and Ancestor (M)
    0563. Binary Tree Tilt (E)
    0445. Add Two Numbers II (M)
    1283. Find the Smallest Divisor Given a Threshold (M)
    C Primer Plus note9
    C Primer Plus note8
    C Primer Plus note7
    C Primer Plus note6
  • 原文地址:https://www.cnblogs.com/z-x-y/p/7019758.html
Copyright © 2011-2022 走看看