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. Windows下python3登陆和操作linux服务器

    一.环境准备 python3远程连接需要用到pycrytodome和paramiko库,其中后者依赖前者,所以按照顺序来安装 1. 安装pycrytodome 1 pip install pycryt ...

  2. linux中nginx、mysql安装碰到的问题

    服务器到期新买了一台服务器,记录一下重新安装基本环境碰到了一些问题 安装nginx 1. 启动失败 403 forbidden nginx 解决方案:(个人使用直接用了root账号,修改对应nginx ...

  3. java单链表的实现自己动手写一个单链表

    单链表:单链表是一种链式存取的数据结构,用一组地址任意的存储单元存放线性表中的数据元素.链表中的数据是以结点来表示的,每个结点的构成:元素(数据元素的映象) + 指针(指示后继元素存储位置),元素就是 ...

  4. SQL Server 最小日志记录

    SQL Server之所以记录事务日志,首要目的是为了把失败或取消的操作还原到最原始的状态,但是,并不是所有的操作都需要完全记录事务日志,比如,在一个空表上放置排他锁,把大量的数据插入到该空表中.即使 ...

  5. Flutter01-学习准备

    1. 简介: Flutter是谷歌的移动UI框架,可以快速在iOS和Android上构建高质量的原生用户界面. Flutter可以与现有的代码一起工作.在全世界,Flutter正在被越来越多的开发者和 ...

  6. 用canvas实现简单的下雪效果

    首先新建一个html文件,将body的背景设置为天空的那种深蓝色,并创建一个canvas,canvas的操作逻辑都放在snow.js中: <!DOCTYPE html> <head& ...

  7. C++泛化双端队列

    循环双端队列 双端队列可以在队首和队尾进行入队操作.出队操作的特殊队列. 循环双端队列是充分利用空间,使用格外的数据存储队头和队尾,这里利用数组进行实现. 循环双端队列(CircleQueue.h) ...

  8. hadoop HDFS扩容

    1.纵向扩容(添加硬盘) 1.1 添加硬盘 确定完成添加,运行 lsblk 查看硬盘使用情况 1.2 硬盘分区 fdisk /dev/sdb #对新硬盘sdb进行分区 m 帮助 n 添加一个分区 p ...

  9. .Net Core 依赖注入手记

    .Net Core自身提供了一套简单的DI框架,能满足我们DI基本的需求.它依赖以下组件,需要从Nuget包下拉取. Microsoft.Extensions.DependencyInjection. ...

  10. Django中使用CORS实现跨域请求

    跨域请求: ​    请求url包含协议.网址.端口,任何一种不同都是跨域请求. 1.安装cors模块 pip install django-cors-headers2.添加应用 INSTALLED_ ...