专栏首页郭耀华‘s Blogpython练习题-day11

python练习题-day11

1、编写装饰器,为多个函数加上认证的功能(用户的账号密码来源于文件),

要求:登录成功一次,后续的函数都无需再输入用户名和密码
flag=False
def wrapper(fun):
    def inner(*args,**kwargs):
        global flag
        if flag==True:
            res=fun(*args,**kwargs)
            return res
        if flag==False:
            count=0
            while count<3:
                uname=input("请输入用户名:")
                pwd=input("请输入密码:")
                f1=open("info_database",encoding="utf-8") #打开存储类型为字典的一个文件
                data=f1.read()
                if eval(data).get(uname)==pwd:
                    res=fun(*args,**kwargs)
                    flag=True
                    return res

                else:
                    print("用户名或密码错误,请重新输入(你还有%s次机会)"%(2-count))
                    count+=1
    return inner
@wrapper
def goods_add():
    print("购买商品")
@wrapper
def good_del():
    print("删除商品")
2.编写装饰器,为多个函数加上记录调用功能,要求每次调用函数都将被调用的函数名称写入文件
def wrapper(fun):
    def inner(*args,**kwargs):
        with open("log.txt","a",encoding="utf-8") as f1:
            f1.write(fun.__name__+"\n")

        res=fun(*args,**kwargs)
        return res
    return inner
@wrapper
def good_add():
    print("购买商品")

good_add()
good_add()

3、进阶作业(选做):

1.编写下载网页内容的函数,要求功能是:用户传入一个url,函数返回下载页面的结果 2.为题目1编写装饰器,实现缓存网页内容的功能: # 具体:实现下载的页面存放于文件中,如果文件内有值(文件大小不为0),就优先从文件中读取网页内容,否则,就去下载,然后存到文件中

import os
from urllib.request import urlopen
def cache(func):
    def inner(*args,**kwargs):
        if os.path.getsize('web_cache'):
            with open('web_cache','rb') as f:
                return f.read()
        ret = func(*args,**kwargs)  #get()
        with open('web_cache','wb') as f:
            f.write(b'*********'+ret)
        return ret
    return inner

@cache
def get(url):
    code = urlopen(url).read()
    return code

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • QQ聊天记录备份助手 v1.0——搜索、备份、恢复QQ聊天记录文件,重装系统必备

    项目地址 https://github.com/guoyaohua/QQBackUp 开发环境 Netbean JAVA 功能描述 自动搜索硬盘中的QQ聊天记录...

    郭耀华
  • 在linux ubuntu下搭建深度学习/机器学习开发环境

    一、安装Anaconda 1.下载 下载地址为:https://www.anaconda.com/download/#linux ? ? 2.安装anacond...

    郭耀华
  • 思科实验

    switchport access vlan vlan_num #绑定某个vlan

    郭耀华
  • TensorFlow中的数据类型

    TensorFlow接受了Python自己的原生数据类型,例如Python中的布尔值类型,数值数据类型(整数,浮点数)和字符串类型。单一值将转换为0维张...

    于小勇
  • 一次近乎完美的PostgreSQL版本大升级实践

    2020 年 5 月,我们与 OnGres 合作,对 GitLab 上的 Postgres 集群进行版本大更新,从 9.6 版本升级到 11 版本。升级全部在维...

    深度学习与Python
  • Python3 编码问题: 怎么将Unicode转中文,以及GBK乱码ÖйúÉÙÊýÃñ×åÌØÉ«´åÕ¯

    如果type(text) is str, 那么text.encode(‘latin1’).decode(‘unicode_escape...

    学到老
  • 饿了么、抖音pojie-flask+frida-rpc

    之前饿了么是不需要加密参数,现在需要加密参数,听说的。他的加密参数有三个,之前进行评估的时候,为了快速开发,就是用了frida的rpc进行了加密参数调用。

    吾爱小白
  • SpringBoot使用@WebFilter注解定义拦截器

    Servlet3.0提供@WebFilter注解将一个实现了javax.servlet.Filter接口的类定义为过滤器,这样我们在web应用中使用过滤器时,也...

    王念博客
  • (二十四) 初遇python OOP面向对象编程-类和实例对象

    各位读者大大们大家好,今天学习python的面向对象编程-类和实例对象,并记录学习过程欢迎大家一起交流分享。

    亚乐记
  • 一个简单的获取网络附件信息API

    Youngxj

扫码关注云+社区

领取腾讯云代金券