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个数字,能组成多少个互不相同且无重复数字的三位数?都是多少? 程序分析:可填在百位.十 ...
随机推荐
- Ubuntu19.10安装OMNeT++ (omnetpp-5.6)中遇到的问题
在官网上下载对应版本的安装包,里面有说明性的文档,先在第五章ubuntu那里配置好前期的环境,再到linux那一章,看进行安装,本文即从这里开始记录. 安装包中的文档目录为:omnetpp-5.6/d ...
- Vue.js——学习笔记(一)
Vue-自学笔记 Vue (读音 /vjuː/,类似于 view) 是一套用于构建用户界面的渐进式框架.与其它大型框架不同的是,Vue 被设计为可以自底向上逐层应用.Vue 的核心库只关注视图层,不仅 ...
- webpack 手动创建项目
前言: webpack作为当前算是比较流行的打包工具之一,通过设置入口文件开始会把入口文件所依赖的所有文件(js,css,image等)进行对应的打包处理,其实现当时真的是很独特.现在流行的脚手架工具 ...
- 54-with管理文件操作上下文
目录 with管理文件操作上下文 with管理文件操作上下文 之前我们使用open()方法操作文件,但是open打开文件后我们还需要手动释放文件对操作系统的占用.其实我们可以更方便的打开文件,即Pyt ...
- 大厂面试题:集群部署时的分布式 session 如何实现?
面试官心理分析 面试官问了你一堆 dubbo 是怎么玩儿的,你会玩儿 dubbo 就可以把单块系统弄成分布式系统,然后分布式之后接踵而来的就是一堆问题,最大的问题就是分布式事务.接口幂等性.分布式锁, ...
- SpringBoot图文教程11—从此不写mapper文件「SpringBoot集成MybatisPlus」
有天上飞的概念,就要有落地的实现 概念十遍不如代码一遍,朋友,希望你把文中所有的代码案例都敲一遍 先赞后看,养成习惯 SpringBoot 图文教程系列文章目录 SpringBoot图文教程1「概念+ ...
- Sentinel Slot扩展实践-流控熔断预警实现
前言 前几天公司生产环境一个服务由于流量上升触发了 Sentinel 的流控机制,然后用户反馈访问慢,定位发现是 task 定时任务导致,后面 task 优化之后发布,流量恢复正常. 这是一个再正常不 ...
- Linux-基本操作(登入登出,图形化界面,命令行界面)
命令行界面登录 (1)命令行登录界面 安装好Centos后,系统启动默认进入的是图形化界面,可以通过如下命令修改进入命令行界面: 命令行登录:systemctl set-default multi ...
- A. Reorder the Array
You are given an array of integers. Vasya can permute (change order) its integers. He wants to do it ...
- disruptor 核心概念 二
一.Disruptor图解 二.disruptor核心概念 1.RingBuffer到底是啥?正如名字所说的一样,他是一个环(首尾相接的环)它用做在不同上下文(线程)间传递数据的buffer Ring ...