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个数字,能组成多少个互不相同且无重复数字的三位数?都是多少? 程序分析:可填在百位.十 ...
随机推荐
- 基于FPGA的RGB图像转灰度图像算法实现
一.前言 最近学习牟新刚编著<基于FPGA的数字图像处理原理及应用>的第六章直方图操作,由于需要将捕获的图像转换为灰度图像,因此在之前代码的基础上加入了RGB图像转灰度图像的算法实现. 2 ...
- Mongodb 对于Sort排序能够支持的最大内存限制查看和修改
MongoDB Server对于Sort排序能够支持的最大内存限制查看: > use admin switched to db admin >db.runCommand({ getPara ...
- paillier加密算法原理详解
paillier加密算法是一种公钥加密算法,基于复合剩余类的困难问题.满足加法同态,即密文相乘等于明文相加:D(E(m1)·E(m2))=m1+m2.这里详细介绍其加密解密是如何推导的,需要具备数论. ...
- 实用的Python(3)超简单!基于Python搭建个人“云盘”
1 简介 当我们想要从本地向云服务器上传文件时,比较常用的有pscp等工具,但避免不了每次上传都要写若干重复的代码,而笔者最近发现的一个基于Python的工具updog,可以帮助我们在服务器上搭建类似 ...
- Spring配置cache(concurrentHashMap,guava cache、redis实现)附源码
在应用程序中,数据一般是存在数据库中(磁盘介质),对于某些被频繁访问的数据,如果每次都访问数据库,不仅涉及到网络io,还受到数据库查询的影响:而目前通常会将频繁使用,并且不经常改变的数据放入缓存中,从 ...
- 大型Java进阶专题(一) 前言
前言 各位读者好,本系列为Java进阶专题,为那些有一定工作经验,做了多年业务的码农,希望突破技术瓶颈,但没有形成系统的Java只是体系,缺乏清晰的提升方法和学习路径的人,比如作者本人.该课题的是 ...
- git删除远程仓库中的文件夹
具体操作如下: git rm -r --cached .history #删除目录 git commit -m”删除.history文件夹” git push -r表示递归所有子目录,如果你要删 ...
- 简单易用的图像解码库介绍 —— stb_image
原文链接:简单易用的图像解码库介绍 -- stb_image 说到图像解码库,最容易想起的就是 libpng 和 libjpeg 这两个老牌图像解码库了. libpng 和 libjpeg 分别各自对 ...
- Redis05——Redis Cluster 如何实现分布式集群
前面一片文章,我们已经说了Redis的主从集群及其哨兵模式.本文将继续介绍Redis的分布式集群. 在高并发场景下,单个Redis实例往往不能满足业务需求.单个Redis数据量过大会导致RDB文件过大 ...
- 个人项目作业(wc.exe)
1.GitHub项目地址 https://github.com/QiuBin666/WC 项目介绍: 题目描述 Word Count1. 实现一个简单而完整的软件工具(源程序特征统计程序).2. 进行 ...