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. C++扬帆远航——15(项目二,太乐了)

    /* * Copyright (c) 2016,烟台大学计算机与控制工程学院 * All rights reserved. * 文件名:tailezhanshi.cpp * 作者:常轩 * 微信公众号 ...

  2. Internet上的音频/视频概述

    Internet上的音频/视频概述 计算机网络最初是为传送数据信息设计的.因特网 IP 层提供的"尽最大努力交付"服务,以及每一个分组独立交付的策略,对传送数据信息也是很合适的. ...

  3. FPGA小白学习之路(4)PLL中的locked信号解析(转)

    ALTPLL中的areset,locked的使用 转自:http://www.360doc.com/content/13/0509/20/9072830_284220258.shtml 今天对PLL中 ...

  4. 解决getImageData跨域问题

    在项目开发过程中要用到html5增加的getImageData方法来实现刮刮卡的效果,后台上传图片,手机端用手刮.在本地开发没遇到问题,上线之后发现刮不了,提示"Uncaught Secur ...

  5. Pom.xml的依赖自动生成

    1.第一种用引入jar包的方法 网盘链接:https://pan.baidu.com/s/10HNjNeZc1d5QrFNtvLPWBA 提取码:oako 以上是整个文件直接用idea打开即可 imp ...

  6. 吐槽苹果开放接口のappleid登陆

    这里吐槽一下苹果的开发文档,一切源于前段时间,公司的产品app(某知名资讯app)要接入苹果登陆(ios13发布以来,apple就流氓要求新上线的app,如果有第三方登陆的话,必须要接入appleid ...

  7. C++ 迷宫寻路问题

    迷宫寻路应该是栈结构的一个非常经典的应用了, 最近看数据结构算法应用时看到了这个问题, 想起来在校求学时参加算法竞赛有遇到过相关问题, 感觉十分亲切, 在此求解并分享过程, 如有疏漏, 欢迎指正 问题 ...

  8. 原生js实现在表格用鼠标框选并有反选功能

    今天应同学要求,需要写一个像Excel那样框选高亮,并且实现框选区域实现反选功能.要我用原生js写,由于没什么经验翻阅了很多资料,第一次写文章希望各位指出不足!! 上来先建表 <div clas ...

  9. 微信小程序最新授权方法,getUserInfo

    20180511微信小程序正式关闭原先getUserInfo的逻辑 不再允许自动弹出授权框. 方法一: index.wxml(准备一个用于给用户授权的页面,我这里直接用了一个全屏按钮) <vie ...

  10. vue+element 表单封成组件(2)

    今天我们继续把时间选择器,多选框和单选框加上 父组件(在昨天的基础上增加): <template> <el-form :model="ruleForm" ref= ...