zoukankan      html  css  js  c++  java
  • python中的装饰器练习

    一:编写装饰器,为多个函数加上认证的功能(用户的账号密码)
    要求登录成功一次,后续的函数都无需输入用户名和密码
    FLAG=False#此时还未登录 全局变量 写这个步骤的意义在于:方便 知道已经登录成功了,就不再重复登录
    def login(func):#为多个函数加上的认证功能
    def inner(*args,**kwargs):#加上装饰器
    global FLAG#给函数内的全局变量赋值
    if FLAG:
    ret = func(*args, **kwargs) # func就是被装饰的函数
    return ret
    #'''写登录程序'''
    else:
    username=input('亲输入你的名字:')
    password=input('亲输入你的密码:')
    if username=='lxx' and password=='123':
    FLAG=True
    ret=func(*args,**kwargs) #func就是被装饰的函数
    return ret
    else:
    print('错误,登录失败')
    return inner

    @login
    def shoplist_add(): #两个函数有不同的功能
    print('增加一件物品')

    @login
    def shoplist_del():
    print('删除一件物品')

    shoplist_add()
    shoplist_del()

    二:编写装饰器,为多个函数加上记录调用功能,要求每次调用函数都将被调用的函数名称写入文件


    def log(func):
    def inner(*args,**kwargs):
    with open('log','a',encoding='utf-8') as f:
    f.write(func.__name__)#每次调用函数都将被调用的函数名称写入文件
    ret=func(*args,**kwargs)
    return ret
    return inner

    @log
    def shoplist_add(): #两个函数有不同的功能
    print('增加一件物品')

    @log
    def shoplist_del():
    print('删除一件物品')

    shoplist_add()
    shoplist_del()

    三:进阶作业:
    1.编写下载网页内容的函数,要求功能是:用户传入一个URL,函数返回下载页面的结果
    2.为题目一编写装饰器,实现缓存网页内容的功能
    3.具体:实现下载的页面存放与文件中,如果文件内有值(文件大小不为零),就优先从文件中读取网页内容
    import os
    from urllib.request import urlopen
    def cache(func):
    def inner(*args,**kwargs):
    if os.path.getsize('log'):#查看文件大小 如果不为零为 判断文件中是否有内容
    with open('log','rb') as f:
    return f.read()
    ret=func(*args,**kwargs)#请求网页的函数
    with open('log','wb') as f: #wb不需要encoding='utf-8'
    f.write(b'****vfd**' + ret) #下载的页面存放在文件中 将请求的结果写入文件
    return ret
    return inner

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

    ret=get('https://shimo.im/docs/VN0BLgAIBdMVSa4S/read')
    print(ret)
    ret=get('https://shimo.im/docs/VN0BLgAIBdMVSa4S/read')
    print(ret)
    ret=get('https://shimo.im/docs/VN0BLgAIBdMVSa4S/read')
    print(ret)
  • 相关阅读:
    kyeremal-bzoj2038-[2009国家集训队]-小z的袜子(hose)-莫队算法
    移位操作之旋转移位
    leetcode 二分查找 Search in Rotated Sorted Array
    背包算法练习--求小于某数字的数组最大和:
    Splunk 会议回想: 大数据的关键是机器学习
    CSDN个人空间、问答频道停站维护公告
    HDFS主要节点解说(一)节点功能
    24点
    【Nginx】事件驱动框架和异步处理
    OC中字符串的提取与替换-四种不同方法实现
  • 原文地址:https://www.cnblogs.com/lxx99/p/11694181.html
Copyright © 2011-2022 走看看