python之道15
请实现一个装饰器,限制该函数被调用的频率,如10秒一次(借助于time模块,time.time())(面试题,有点难度,可先做其他)
答案
# 思路 运行不能用
import time def wrapper(f):
t = 0
def inner(*args,**kwargs):
nonlocal t
if time.time() - t > 3:
ret = f(*args,**kwargs)
t = time.time()
return ret
return inner @wrapper
def func():
print('in func') 方法一:
import time def wrapper(s):
def inner():
with open("lasttime",encoding='utf-8',mode='r+')as f1:
ret1 = f1.readlines()
start = time.time() if start - float(ret1[-1]) > 10:
s()
end = time.time()
f1.write(f"{end}\n")
else:
print(f"调用时间太频繁,还剩余{10 - int(start - float(ret1[-1]))}可以执行")
return inner @wrapper
def test_time1():
print("执行函数")
test_time1()
# 方法二
def timmer(fun):
count = 0
def wrapper(*args, **kwargs):
nonlocal count
start_time = time.time()
data = fun(*args, **kwargs)
end_time = time.time()
dt = end_time - start_time
count += 1
print(f"被调用{count}次,本次调用花费时间{dt}秒。")
return data
return wrapper
@timmer
def func():
print("123")
time.sleep(10)
func()
func()
请写出下列代码片段的输出结果:
def say_hi(func):
def wrapper(*args,**kwargs):
print("HI")
ret=func(*args,**kwargs)
print("BYE")
return ret
return wrapper
def say_yo(func):
def wrapper(*args,**kwargs):
print("Yo")
return func(*args,**kwargs)
return wrapper
@say_hi
@say_yo
def func():
print("ROCK&ROLL")
func()
答案
HI
Yo
ROCK&ROLL
BYE
- 编写装饰器完成下列需求:
- 用户有两套账号密码,一套为京东账号密码,一套为淘宝账号密码分别保存在两个文件中。
- 设置四个函数,分别代表 京东首页,京东超市,淘宝首页,淘宝超市。
- 启动程序后,呈现用户的选项为:
1,京东首页
2,京东超市
3,淘宝首页
4,淘宝超市
5,退出程序
四个函数都加上认证功能,用户可任意选择,用户选择京东超市或者京东首页,只要输入一次京东账号和密码并成功,则这两个函数都可以任意访问;用户选择淘宝超市或者淘宝首页,只要输入一次淘宝账号和密码并成功,则这两个函数都可以任意访问.
相关提示:用带参数的装饰器。装饰器内部加入判断,验证不同的账户密码。
答案
status = {'jd':False, 'taobao':False}
user_dic = {}
menu = {1:'京东首页', 2:'京东超市', 3:'淘宝首页', 4:'淘宝超市', 5:'退出程序'}
for k,v in enumerate(menu,1):
print(k,menu[v]) def wrapper_out(n):
def wrapper(f):
def inner(*args,**kwargs): if status[n] == True :
ret = f(*args, **kwargs)
return ret
else:
user_input = input('请输入用户名: ').strip()
pass_input = input('请输入密码: ').strip()
with open(n,mode='r',encoding='utf-8') as f1:
for line in f1:
username,password = line.strip().split('|')
user_dic[username] = password
if user_input in user_dic and pass_input == password:
status[n] = True
ret = f(*args, **kwargs)
return ret
return False return inner
return wrapper @wrapper_out('jd')
def jd_index():
print('京东首页') @wrapper_out('jd')
def jd_chaoshi():
print('京东超市') @wrapper_out('taobao')
def taobao_index():
print('淘宝首页') @wrapper_out('taobao')
def taobao_chaoshi():
print('淘宝超市') def func():
while 1:
chiose = input('请选择序号: ').strip()
if chiose == '1':
jd_index()
elif chiose == '2':
jd_chaoshi()
elif chiose == '3':
taobao_index()
elif chiose == '4':
taobao_chaoshi()
elif chiose == '5':
exit()
func()
用递归函数完成斐波那契数列(面试题):
斐波那契数列:1,1,2,3,5,8,13,21..........(第三个数为前两个数的和,但是最开始的1,1是特殊情况,可以单独讨论)
答案
def func(n):
if n == 0:
return n
elif n == 1:
return n
else:
return func(n-1) + func(n-2)
print(func(6))
# 输出结果
8
用户输入序号获取对应的斐波那契数字:比如输入6,返回的结果为8.
给l1 = [1,1,2,2,3,3,6,6,5,5,2,2] 去重,不能使用set集合(面试题)。
答案
l1 = [1,1,2,2,3,3,6,6,5,5,2,2]
l2 = []
def func(n):
for i in n:
if n.count(i) >= 2:
if i not in l2:
l2.append(i)
return l2
print(func(l1))
# 输出结果
[1, 2, 3, 6, 5]
python之道15的更多相关文章
- Python补充06 Python之道
作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! Python有一个彩蛋,用下面语句调出: import this 该彩蛋的文档记录 ...
- Python天天美味(15) - Python正则表达式操作指南(re使用)(转)
http://www.cnblogs.com/coderzh/archive/2008/05/06/1185755.html 简介 Python 自1.5版本起增加了re 模块,它提供 Perl 风格 ...
- 彩蛋 Python之道
彩蛋 Python之道 作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 使用下面的语句可以调出Python中的一个彩蛋, impo ...
- 【转】Python之道
作者:Vamei 出处:http://www.cnblogs.com/vamei Python有一个彩蛋,用下面语句调出: import this 该彩蛋的文档记录于PEP 20. 语句执行之后,终端 ...
- Python之道(一)之安装Python
"Python之道"首先介绍一下在windows系统下怎样安装Python开发环境. (1)下载MSI安装文件 进入网址www.python.org,点击Downloads进入下载 ...
- 《Think Python》第15章学习笔记
目录 <Think Python>第15章学习笔记 15.1 程序员定义的类型(Programmer-defined types) 15.2 属性(Attributes) 15.3 矩形( ...
- 一入python深似海--python之道
python社区不乏幽默.先来看"python之道"这首诗. 导入this包: import this 输出是一首诗,这首诗总结了Python的风格,能够指导Python程序猿的编 ...
- Python 30道高频面试题及详细解答
开学啦,开学啦!周末坐地铁的时候看到很多同学推着行李箱,拎着大包小包的穿梭在人群中,哎新的一学期又开始啦,同时也意味着很多同学要准备毕业啦,尤其是准大四,准研三的同学. 今年的招聘行情并不乐观,小公司 ...
- python几道简单的算法题
最近看了python的语法,但是总感觉不知道怎么使用它,还是先来敲敲一些简单的程序吧. 1.题目:有1.2.3.4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少? 程序分析:可填在百位.十 ...
随机推荐
- 分布式系统一致性问题与Raft算法(上)
最近在做MIT6.824的几个实验,真心觉得每一个做分布式相关开发的程序员都应该去刷一遍(裂墙推荐),肯定能够提高自己的技术认知水平,同时也非常感谢MIT能够把这么好的资源分享出来. 其中第二个实验, ...
- sublime安装vue插件
1.打开sublime text 3按 Ctrl+Shift+P(相信你有单身的手速,同时按完这3个键) 2.选中上图中,框出来的内容,按下enter. 3.选择上图的第二个即:vue syntax ...
- Hexo+github如何搭建博客
前言 博客有第三方平台,也可以自建,比较早的有博客园.CSDN,近几年新兴的也比较多诸如:WordPress.segmentFault.简书.掘金.知乎专栏.Github Page 等等. 这次我要说 ...
- Redis(十一):哨兵模式架构设计分析
业务最初的应用场景中,我们也许使用单机redis就可以应付业务要求,但并非一直可行. 比如单机的读写能力问题,单机的可用性问题,单机的数据安全性问题.这些都是许多互联网应用经常会遇到的问题,也基本上都 ...
- 微信小程序结构目录、配置介绍、视图层(数据绑定,运算,列表渲染,条件渲染)
目录 一.小程序结构目录 1.1 小程序文件结构和传统web对比 1.2 基本的项目目录 二.配置介绍 2.1 配置介绍 2.2 全局配置app.json 2.3 page.json 三.视图层 3. ...
- python小白入门
阅读目录 一python介绍 二安装python解释器 三第一个python程序 四变量 五用户与程序交互 六基本数据类型 七格式化输出 八基本运算符 九流程控制之if...else 十流程控制之wh ...
- oracle 10g 搭建备库以及一次DG GAP的处理情况
1.主庫全庫備份rman target/rman> backup database format '/backup/fullbak/fullbak_%U';2.用scp傳到備庫,最好是rman目 ...
- mongo的聚合操作
对图7-1所示的数据集exampledata1,使用聚合操作实现以下功能: (1)不返回_id字段,只返回age和sex字段. (2)所有age大于28的记录,只返回age和sex. (3)在$mat ...
- drf认证组件(介绍)、权限组件(介绍)、jwt认证、签发、jwt框架使用
目录 一.注册接口 urls.py views.py serializers.py 二.登录接口 三.用户中心接口(权限校验) urls.py views.py serializers.py 四.图书 ...
- iview admin template 基础模板架子
https://github.com/iview/iview-admin/tree/template