1. 请实现一个装饰器,限制该函数被调用的频率,如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()
  2. 请写出下列代码片段的输出结果:

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. 启动程序后,呈现用户的选项为:

​ 1,京东首页

​ 2,京东超市

​ 3,淘宝首页

​ 4,淘宝超市

​ 5,退出程序

  1. 四个函数都加上认证功能,用户可任意选择,用户选择京东超市或者京东首页,只要输入一次京东账号和密码并成功,则这两个函数都可以任意访问;用户选择淘宝超市或者淘宝首页,只要输入一次淘宝账号和密码并成功,则这两个函数都可以任意访问.

    相关提示:用带参数的装饰器。装饰器内部加入判断,验证不同的账户密码。

    答案

    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()
  2. 用递归函数完成斐波那契数列(面试题):

斐波那契数列: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.

  1. 给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的更多相关文章

  1. Python补充06 Python之道

    作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! Python有一个彩蛋,用下面语句调出: import this 该彩蛋的文档记录 ...

  2. Python天天美味(15) - Python正则表达式操作指南(re使用)(转)

    http://www.cnblogs.com/coderzh/archive/2008/05/06/1185755.html 简介 Python 自1.5版本起增加了re 模块,它提供 Perl 风格 ...

  3. 彩蛋 Python之道

    彩蛋 Python之道 作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 使用下面的语句可以调出Python中的一个彩蛋, impo ...

  4. 【转】Python之道

    作者:Vamei 出处:http://www.cnblogs.com/vamei Python有一个彩蛋,用下面语句调出: import this 该彩蛋的文档记录于PEP 20. 语句执行之后,终端 ...

  5. Python之道(一)之安装Python

    "Python之道"首先介绍一下在windows系统下怎样安装Python开发环境. (1)下载MSI安装文件 进入网址www.python.org,点击Downloads进入下载 ...

  6. 《Think Python》第15章学习笔记

    目录 <Think Python>第15章学习笔记 15.1 程序员定义的类型(Programmer-defined types) 15.2 属性(Attributes) 15.3 矩形( ...

  7. 一入python深似海--python之道

    python社区不乏幽默.先来看"python之道"这首诗. 导入this包: import this 输出是一首诗,这首诗总结了Python的风格,能够指导Python程序猿的编 ...

  8. Python 30道高频面试题及详细解答

    开学啦,开学啦!周末坐地铁的时候看到很多同学推着行李箱,拎着大包小包的穿梭在人群中,哎新的一学期又开始啦,同时也意味着很多同学要准备毕业啦,尤其是准大四,准研三的同学. 今年的招聘行情并不乐观,小公司 ...

  9. python几道简单的算法题

    最近看了python的语法,但是总感觉不知道怎么使用它,还是先来敲敲一些简单的程序吧. 1.题目:有1.2.3.4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少? 程序分析:可填在百位.十 ...

随机推荐

  1. 分布式系统一致性问题与Raft算法(上)

    最近在做MIT6.824的几个实验,真心觉得每一个做分布式相关开发的程序员都应该去刷一遍(裂墙推荐),肯定能够提高自己的技术认知水平,同时也非常感谢MIT能够把这么好的资源分享出来. 其中第二个实验, ...

  2. sublime安装vue插件

    1.打开sublime text 3按 Ctrl+Shift+P(相信你有单身的手速,同时按完这3个键) 2.选中上图中,框出来的内容,按下enter. 3.选择上图的第二个即:vue syntax ...

  3. Hexo+github如何搭建博客

    前言 博客有第三方平台,也可以自建,比较早的有博客园.CSDN,近几年新兴的也比较多诸如:WordPress.segmentFault.简书.掘金.知乎专栏.Github Page 等等. 这次我要说 ...

  4. Redis(十一):哨兵模式架构设计分析

    业务最初的应用场景中,我们也许使用单机redis就可以应付业务要求,但并非一直可行. 比如单机的读写能力问题,单机的可用性问题,单机的数据安全性问题.这些都是许多互联网应用经常会遇到的问题,也基本上都 ...

  5. 微信小程序结构目录、配置介绍、视图层(数据绑定,运算,列表渲染,条件渲染)

    目录 一.小程序结构目录 1.1 小程序文件结构和传统web对比 1.2 基本的项目目录 二.配置介绍 2.1 配置介绍 2.2 全局配置app.json 2.3 page.json 三.视图层 3. ...

  6. python小白入门

    阅读目录 一python介绍 二安装python解释器 三第一个python程序 四变量 五用户与程序交互 六基本数据类型 七格式化输出 八基本运算符 九流程控制之if...else 十流程控制之wh ...

  7. oracle 10g 搭建备库以及一次DG GAP的处理情况

    1.主庫全庫備份rman target/rman> backup database format '/backup/fullbak/fullbak_%U';2.用scp傳到備庫,最好是rman目 ...

  8. mongo的聚合操作

    对图7-1所示的数据集exampledata1,使用聚合操作实现以下功能: (1)不返回_id字段,只返回age和sex字段. (2)所有age大于28的记录,只返回age和sex. (3)在$mat ...

  9. drf认证组件(介绍)、权限组件(介绍)、jwt认证、签发、jwt框架使用

    目录 一.注册接口 urls.py views.py serializers.py 二.登录接口 三.用户中心接口(权限校验) urls.py views.py serializers.py 四.图书 ...

  10. iview admin template 基础模板架子

    https://github.com/iview/iview-admin/tree/template