博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
一些作业
阅读量:5124 次
发布时间:2019-06-13

本文共 2989 字,大约阅读时间需要 9 分钟。

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

   要求登录成功一次,后续的函数都无需再输入用户名和密码

1 def wrapper(func): 2     def inner(*args,**kwargs): 3         print('欢迎加入我们的网站!') 4         func() 5         print('点击此链接跳转!') 6     return inner 7  8 @wrapper 9 def register():10     with open('user_file', mode='r+',encoding='utf-8') as f:11         f.write('{} {}'.format(username,password))12 13 @wrapper14 def log_in():15      with open('user_file',mode='r',encoding='utf-8') as f1:16         user_data = f1.readline()17      i = 118      while i <= 3:19          usn = input('请输入您的用户名:')20          pwd = input('请输入您的密码:')21          if user_data.split()[0].strip() == username and user_data.split()[1].strip() == pwd:22              print('Welcome!')23              break24          else:25              print('用户名或密码错误,请再输入一次您的用户名和密码!您还有{}次输入机会'.format(3-i))26              i += 127              continue28 29 30 username = input('请输入您注册的用户名:')31 password = input('请输入您的注册用户名密码:')32 register()33 log_in()

官方答案:

1 FLAG = False                      #为了使后续的函数都无需再输入用户名和密码 2 def login(func): 3     def inner(*args,**kwargs): 4         global FLAG 5         if FLAG == True: 6             ret = func(*args,**kwargs)                   #func是被装饰的函数 7             return ret 8         else: 9             username = input('>>>username:')10             password = input('>>>password:')11             if username == 'xzb' and password == '123456':12                 FLAG = True13                 ret = func(*args,**kwargs)                 #func是被装饰的函数14                 return ret15             else:16                 print('登录失败!')17     return inner18 19 @login20 def shoplist_add():21     print('增加一件商品!')22 23 @login24 def shoplist_del():25     print('删除一件商品!')26 27 shoplist_add()28 shoplist_del()

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

1 def log(func): 2     def inner(*args,**keargs): 3         with open('log',mode='a',encoding='utf-8') as f: 4             f.write(func.__name__+'\n')              #func.__name__获取函数名字 5         ret = func(*args,**keargs) 6         return ret 7     return inner 8  9 @log10 def shoplist_add():11     print('增加一件商品!')12 13 @log14 def shoplist_del():15     print('删除一件商品!')16 17 shoplist_add()18 shoplist_del()

3.编写下载网页的函数,要求功能时:用户传入一个url,函数返回下载页面的结果,

如果文件内有值,就优先从文件中读取网页内容,否则就去下载

1 import os 2 from urllib.request import urlopen 3 def cache(func): 4     def inner(*args,**kwargs): 5         if os.path.getsize('web_cache'):        #os.path.getsize()判断内容是否为空 6             with open('web_cache','rb') as f: 7                 return f.read() 8         ret = func(*args,**kwargs) 9         with open('web_cache','wb') as f:10             f.write(b'******'+ret)        #这个地方要注意,ret是bytes类型,所以前面加的字符串也要是bytes类型11         return ret12     return inner13 14 @cache15 def get(url):16     code = urlopen(url).read()17     return code18 19 ret = get('http://www.baidu.com')20 print(ret)21 ret = get('http://www.baidu.com')  ##22 print(ret)

 

转载于:https://www.cnblogs.com/rcat/p/9343681.html

你可能感兴趣的文章
《JavaWeb从入门到改行》注册时向指定邮箱发送邮件激活
查看>>
C++ explicit关键字详解
查看>>
Entity Framework context per request
查看>>
136. Single Number
查看>>
mysql :完整性约束
查看>>
spring容器bean的作用域 & spring容器是否是单例的一些问题
查看>>
asp.net 根据当前时间计算是否股票、期货、黄金交易日期
查看>>
js操作css样式
查看>>
中科大开源镜像使用帮助列表
查看>>
nginx 代理
查看>>
MS Code 使用 TFVC 插件时遇到的问题
查看>>
Android-将切换tabs的指示器合并到ActionBar上
查看>>
[leedcode 52] N-Queens II
查看>>
数据库的应用详解三
查看>>
查看网关
查看>>
STM32三种启动模式 boot0 boot1
查看>>
【STM32】IIC的基本原理(实例:普通IO口模拟IIC时序读取24C02)(转载)
查看>>
AlarmManager使用注意事项
查看>>
Activity的启动模式
查看>>
武汉大学2013年数学分析考研试题参考解答
查看>>