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个数字,能组成多少个互不相同且无重复数字的三位数?都是多少? 程序分析:可填在百位.十 ... 
随机推荐
- Jenkins+Git+Fastlane+Fir CI集成
			上一篇有讲关于fastlane自动化部署,本篇将会着重讲关于fastlane的实际应用. 目标: 利用自动化jenkins打包工具,自动拉取git仓库代码 不需要通过手动检查修改xcode中项目配置修 ... 
- CSS——NO.3(CSS选择器)
			*/ * Copyright (c) 2016,烟台大学计算机与控制工程学院 * All rights reserved. * 文件名:text.cpp * 作者:常轩 * 微信公众号:Worldhe ... 
- Pandorabox固件路由器上申请Let's Encrypt证书,为内网里的多个web服务提供SSL支持
			对于家中宽带有公网IP的用户,有时我们需要将路由器内部网络的某些web服务通过端口转发暴露到外网(例如NAS远程访问),但HTTP是明文传输,有被监听的风险:如果在NAS上使用自签名证书,再端口转发, ... 
- FPGA小白学习之路(6)串口波特率问题的处理
			串口波特率问题的处理 此博文一共包含三个方面的内容:(1)异步串口通信的数据格式:(2)为何串口通信中接收端采样时钟频率是传输的波特率的16倍:(3)串口波特率等概念. 1.异步串口通信的数据格式 串 ... 
- Golang/Python/PHP带你彻底学会gRPC
			目录 一.gRPC是什么? 二.Protocol Buffers是什么? 三.需求:开发健身房服务 四.最佳实践 Golang 1. 安装protoc工具 2. 安装protoc-gen-go 3. ... 
- js面试-手写代码实现new操作符的功能
			我们要搞清楚new操作符到底做了一些什么事情? 1.创建一个新的对象 2.将构造函数的作用域赋给新对象(因此this指向了这个新对象) 3.执行构造函数中的代码(为这个新对象添加属性) 4.返回新对象 ... 
- 由一个项目需求引发的 - textarea中的换行和空格
			当我们使用 textarea 在前台编辑文字,并用 js 提交到后台的时候,空格和换行是我们最需要考虑的问题.在textarea 里面,空格和换行会被保存为/s和/n,如果我们前台输入和前台显示的文字 ... 
- 前端每日实战:20# 视频演示如何用纯 CSS 为母亲节创作一颗像素画风格的爱心
			效果预览 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/LmrZVX 可交互视频教程 此视频 ... 
- NSFileHandle的用法(用于读写文件)
			利用NSFilehandle类提供的方法,允许更有效地使用文件. 一般而言,处理文件时都要经历以下三个步骤: 1.打开文件,并获取一个NSFileHandle对象,以便在后面的I/O操作中引用该文件 ... 
- eclipse代码提示完善
			转载请注明出处:https://www.cnblogs.com/Higurashi-kagome/p/12263267.html 1.参考https://blog.csdn.net/ithomer/a ... 
