装饰器和函数练习

Python基础:装饰器及练习 装饰器是Python中常用的一种高级函数,它可以用于修改其他函数的行为。装饰器本质上是一个函数,它接受一个函数作为输入,并返回一个新的函数作为输出。通过装饰器,我们可以在不修改原函数代码的情况下,给函数添加额外的功能或修改函数的行为。在本文中,我们将详细介绍装饰器的使用,并提供一些练习来帮助您更好地理解装饰器的概念。 阅读详情

*****装饰器练习******
1. 创建add_log装饰器, 被装饰的函数打印日志信息;
2. 日志格式为: [字符串时间] 函数名: xxx, 运行时间:xxx, 运行返回值结果:xxx
“”“

import time


def add_info(fun):
    def wrapper(*args, **kwargs):
        a = fun(*args, **kwargs)
        print('函数名 : %s , 运行时间:%s , 函数返回值结果:%d' % (fun.__name__, time.ctime(), a))
    return wrapper
@add_info
def python(x, y):
    return x * y / 2
python(4,5)

这里写图片描述
**********Test5 第一题*********
数据表记录包含表索引和数值,请对表索引相同的记录进行合并,
即将相同索引的数值进行求和运算,输出按照key值升序进行输出。
- 输入描述:先输入键值对的个数,然后输入成对的index和value值,以空格隔开
- 输出描述:输出合并后的键值对(多行)
- 示例1
输入
4
0 1
0 2
1 2
3 4
输出
0 3
1 2
3 4

count = int(input('输入:\n'))
dic = {}
for i in range(count):
    user_in = input()
    a = user_in.split()
    if int(a[0]) not in dic:
        dic[int(a[0])] = int(a[1])
    else:
        dic[int(a[0])] += int(a[1])
print('输出:%s %s'%(k,v)for k , v in dic.items())

这里写图片描述

*********Test5 第二题*********

将一个英文语句以单词为单位逆序排放。例如“I am a boy”,
逆序排放后为“boy a am I”所有单词之间用一个空格隔开,
语句中除了英文字母外,不再包含其他字符
- 输入描述:将一个英文语句以单词为单位逆序排放。
- 输出描述:得到逆序的句子
示例1
- 输入
I am a boy
- 输出
boy a am I

user_in=input('输入:\n').strip()
print("输出:\n%s" % ' '.join(user_in.split()[::-1]))

这里写图片描述

********Test6 第一题********
用 filter()进行函数式编程,写一段代码来给出一个年
份的列表并返回一个只有闰年的列表。列表解析式实现方式呢?

#filter
print(list(filter(lambda i:(i%4==0 and i%100!=0) or i%400==0,range(2000,2101))))

这里写图片描述

#列表生成式
print(list(i for i in range(2000,2101) if (i%4==0 and i%100!=0) or i%400==0))

这里写图片描述

********Test6 第二题********

列表和字典复习.给出一个整数值,返回代表该值的英文,
比如输入 89 返回”eight-nine”。
附加题:
能够返回符合英文语法规则的形式,比如输入“89”返回
“eighty-nine”。本练习中的值限定在 0到 1,000.

# 练习
dic={'0':'zero','1':'one','2':'two','3':'three','4':'four','5':'five'
     ,'6':'six','7':'seven','8':'eight','9':'nine'}
user_in=input('输入:')
print('-'.join([dic[i] for i in user_in]))

这里写图片描述

dic = {'0': 'zero', '1': 'one', '2': 'two', '3': 'three', '4': 'four', '5': 'five'
    , '6': 'six', '7': 'seven', '8': 'eight', '9': 'nine', '10': 'ten', '11': 'eleven',
       '12': 'twelve', '13': 'thirteen', '14': 'fourteen', '15': 'fifteen',
       '16': 'sixteen', '17': 'seventeen', '18': 'eighteen', '19': 'nineteen'}
dic2 = {'2': 'twenty', '3': 'thirty', '4': 'forty', '5': 'fifty', '6': 'sixty', '7': 'seventy'
    , '8': 'eighty', '9': 'ninety'}

user_in = input('输入:')
if 0<=int(user_in)<=1000:
    if len(user_in) == 1:
        print(dic[user_in])
    elif len(user_in) == 2:
        if user_in[0] == '1':
            print(dic[user_in])
        else:
            print('%s-%s' % (dic2[user_in[0]], dic[user_in[-1]]))
    elif len(user_in) == 3:
        if user_in[1] == user_in[-1] == '0':
            print('%s hundred' % dic[user_in[0]])
        else:
            print('%s hundred and %s-%s'%(dic[user_in[0]], dic2[user_in[1]], dic[user_in[-1]]))
    else:
        print('One thousand')
else:
    print('输入错误!')

这里写图片描述
这里写图片描述

********Test6 第三题********

给出两个可识别格式的日期,比如 MM/DD/YY 或者
DD/MM/YY 格式,计算出两个日期间的天数.

def day_num(data):
    day = 0
    for i in range(1, int(data[-1]) + 1):
        if (i % 4 == 0 and i % 100 != 0) or i % 400 == 0:
            day += 366
        else:
            day += 365
    for j in range(1, int(data[1])):
        for k in dic:
            if str(j) in dic[k]:
                day += int(k)
                break
            else:
                pass
    day += int(data[0])
    return day


dic = {'31': ['1', '3', '5', '7', '8', '10', '12'], '30': ['4', '6', '9', '11'], '28': '2'}
print('请按DAY/MONTH/YERA(07/05/2018)格式输入日期:')
data1 = input('>>').split('/')
data2 = input('>>').split('/')
print('两天相差:%d天' % abs(day_num(data2) - day_num(data1)))

这里写图片描述

********Test6 第四题********

a)修改之前的用户管理脚本,使它能记录用户上次的登录日期和时间(用 time 模块)
,并与用户密码一起保存起来。程序的界面有要求用户输入用户名和密码的提示。无论
户名是否成功登录,都应有提示,在户名成功登录后,应更新相应用户的上次登录时间戳
。如果本次登录与上次登录在时间上相差不超过 4 个小时,则通知该用户:
 “You already logged in at: <last_ login_timestamp>.”
b) 添加一个“管理”菜单,其中有以下两项:
    1)删除一个用户
    2)显示系统中所有用户的名字和他们的密码的清单。
c) 要求用户名不区分大小写。
d) 加强对用户名的限制,不允许符号和空白符









info = {
    'root': {
        "name": "root",
        "passwd": "redhat",
        "gender": 1,  # 1:男,2:女;
        "email": "root@qq.com",
        "age": 18,
        'time': '2018-05-07 15:27:06'
    },
}

menu = """"

    1). 注册新用户
    2). 删除用户
    3). 显示用户信息
    4). 退出系统(exit(0))

"""


def addUser():
    print("01-用户注册界面".center(20, '*'))
    inname = input("*注册用户名:").strip().lower()
    # 判断用户是否已注册?
    if inname in info:
        print('Error:用户%s已注册!' % (inname))
    else:
        passwd = input("*密码:")
        gender = input("性别(1-男,2-女):")
        if not gender:
            gender = None
        else:
            gender = int(gender)
        email = input("邮箱地址:")
        if not email:
            email = None
        age = input("年龄:")
        if not age:
            age = None
        else:
            age = int(age)
        info[inname] = {
            "name": inname,
            "passwd": passwd,
            "gender": gender,  # 1:男,2:女;
            "email": email,
            "age": age
        }
        print("用户%s注册成功" % (inname))


def deleteUser():
    inuser = input("注销的用户名:").strip().lower()
    if inuser in info:
        del info[inuser]
        print("用户%s注销成功" % (inuser))
    else:
        print("用户名%s不存在" % (inuser))


def make():
    while True:
        print("用户管理系统".center(40, '*'), menu)
        choice = input("请输入你的选择:")
        if choice == '1':
            addUser()
        elif choice == '2':
            deleteUser()
        elif choice == '3':
            for i in info:
                print('%s %s' % (i, info[i]))
        elif choice == '4':
            exit(0)
        else:
            print("Error:错误输入!<请输入正确的选择.>")


def main():
    import time
    tryCount = 0
    while tryCount < 3:
        tryCount += 1
        inuser = input("用户名:").strip().lower()
        if inuser in info:
            inpasswd = input("密码:")
            passwd = info[inuser]['passwd']
            if inpasswd == passwd:
                print("%s登陆成功!" % (inuser))
                times = int(time.time())
                if times - time.mktime(time.strptime(info[inuser]['time'], '%Y-%m-%d %H:%M:%S')) < 4 * 60 * 60:
                    print('You already logged in at:%s ' % info[inuser]['time'])
                info[inuser]['time'] = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(times))
                make()
            else:
                print("用户%s的密码错误!" % (inuser))
        else:
            print("用户名%s不存在" % (inuser))
    else:
        print("尝试次数超过3次!")


main()

这里写图片描述

这里写图片描述

21 | 装饰器 在 Python 中,装饰器是一种函数或类,它可以接受一个函数作为输入,并返回一个新的函数作为输出。新的函数通常会扩展或修改原始函数的行为。装饰器的语法通常使用 @ 符号和函数名来定义。在上面的代码中,我们使用 @ 符号和 my_decorator 函数来装饰 my_function 函数。 阅读详情

相关推荐

18、Python 装饰器原理与高级用法从入门到实战

装饰器(Decorator)是Python中最优雅的语法糖之一,也是进阶Python开发的必经之路。本文将深入剖析装饰器执行机制,详解@wraps的作用原理,手把手实现带参数装饰器与类装饰器,并通过5个典型实战案例展示装饰器在权限控制、性能优化等场景的应用。最后提供10道梯度练习题帮助读者全面掌握这一重要特性。

朗朗的博客 1207

Python 装饰器使用指南

装饰器是可调用的对象,其参数是另一个函数(被装饰的函数)。 1 装饰器基础知识 首先看一下这段代码 def deco(fn): print "I am %s!" % fn.__name__ @deco def func(): pass # output I am func! # 没有执行func 函数 但是 deco 被执行了 在...

weixin_30700099的博客 174

语义通信实战:跳过“比特”保“语义”,手把手构建轻量级图像压缩重建网络(基于PyTorch)

本文详细介绍了基于PyTorch的轻量级语义通信系统LICRnet的实现,专注于图像压缩重建中的语义信息保留。通过深度可分离卷积、可变窗口多尺度注意力等创新技术,显著降低计算量并提升性能,特别适用于无人机巡检、远程医疗等物联网场景。文章包含完整的代码实现、训练策略及部署优化方案。

weixin_27697385的博客 221

python 装饰器

装饰器 装饰器是python的高级语法。它主要是用于对函数、方法或类进行加工包装。装饰器采用@语符号,语法简单,可读性高。 装饰器其实是一个函数,它接受函数、方法或类这些可调用对象(callable)作为参数,返回处理过的函数或类对象。当我们想对一个已经封装好的类或者函数添加其他的操作时可以考虑采用装饰器。 装饰函数和方法 1.不含参数的装饰器 首先,我们定义一个函数用于计算平方。 d

yishihuakai的专栏 641

anaconda安装-超详细版

文章目录一、anaconda安装1.1 anaconda安装地址1.2 安装详细步骤检验安装是否成功更改conda源(后续安装第三方库可以加快速度) 一、anaconda安装 Anaconda 是一个用于科学计算的 Python 发行版,支持 Linux, Mac, Windows, 包含了众多流行的科学计算、数据分析的 Python 包。装anaconda,就不需要单独装python了。 anaconda优点: 1、anaconda里面集成了很多关于python科学计算的第三方库,主要是安装方便,而p

in546的博客 25万+

NFS服务器配置与autofs自动挂载

NFS服务器配置autofs自动挂载 环境: hostname ip OS server 192.168.220.138 centos7 client 192.168.220.139 centos7 一、NFS概述 NFS(Network File System)网络文件系统。最大功能就是通过网络,让不同的机器、不同的操作系统可以共享彼此的文件。 二、端口 [root@se...

DoloresOOO的博客 1026

python 装饰器详解

目录   一、装饰器遵循的原则 1、函数名即“变量” 2、高阶函数 3、嵌套函数 4、闭包 二、装饰器介绍 三、装饰器实例 1、从最简单的装饰器做起 2、神奇的@ 3、装饰器也想要参数 4、不支持带参数的被装饰函数的装饰器不是好装饰器 5、不支持有返回值的被装饰函数的装饰器不是好装饰器 6、有没有更骚的操作? 四、内置装饰器 五、装饰器的调用顺序 一、装饰器遵循的...

日入上万 1124

PMBus协议解析:基于I2C的电源管理实战与TMS320F28003x驱动开发

在嵌入式系统与服务器电源设计中,数字电源管理总线是实现高效、可靠电源监控与控制的关键技术。PMBus协议基于广泛应用的I2C总线物理层,通过定义标准化的命令集、数据格式与时序规范,为多路电源的电压电流监控、动态调整及故障处理提供了高效解决方案。其技术价值在于通过硬件自动处理协议解析、时钟拉伸与中断,显著降低软件复杂度,使开发者能聚焦于电源环路设计等核心逻辑。该协议广泛应用于服务器、通信基站及高性能计算板卡等场景,通过引入数据包错误检查、专用告警线等机制,确保了电源管理的可靠性。本文以TI TMS320F28

weixin_29189377的博客 374

Python 编程技术学习(1)函数装饰器

摘要 类似于C# 里面的委托 扩展已有函数的功能 例子,在微信中扩展函数使用

Promise_Lv_2019的博客 372

保姆级教程:用Python 3.10和Ollama在Windows上搞定LightRAG本地部署(附环境配置避坑指南)

本文提供了一份详细的Windows系统下LightRAG本地部署指南,涵盖Python 3.10环境配置、Ollama模型服务安装到LightRAG核心组件部署的全流程。特别针对Windows平台常见问题提供解决方案,帮助开发者快速搭建高效的检索增强生成(RAG)系统,实现专业领域知识的智能检索与整合。

weixin_28725407的博客 486

从 Classic ABAP 到 ABAP Cloud:一份面向开发者的 SAP 学习路线图与实战指南

ABAP技术演进路线:从语法到架构思维 本文系统梳理了现代ABAP开发者的能力成长路径。在S/4HANA与云时代,ABAP已从传统过程式语言转变为支持面向对象、测试驱动和云原生开发的现代技术栈。学习路线应围绕四大核心维度展开:1) 语言基础(ABAP OO/Modern ABAP);2) 工程化实践(ABAP Unit/ATC/Clean ABAP);3) 数据建模(CDS/AMDP);4) 服务化架构(Gateway/OData/Fiori)。文章强调以交付形态倒推技术栈,通过真实案例展示了如何将零散技术

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 361

python装饰器class_python 装饰器详解

python装饰器详解python装饰器的详细解析什么是装饰器?推荐学习:Python视频教程python装饰器(fuctional decorators)就是用于拓展原来函数功能的一种函数,目的是在不改变原函数名(或类名)的情况下,给函数增加新的功能。这个函数的特殊之处在于它的返回值也是一个函数,这个函数是内嵌“原“”函数的函数。一般而言,我们要想拓展原来函数代码,最直接的办法就是侵入代码里面修...

weixin_39898550的博客 697

YOLOv8 智能交通违章检测 - 压线/越线行驶检测详解

本文提出了一种基于YOLOv8的智能交通违章检测方案,重点解决车辆压线/越线行驶的识别问题。系统采用多技术融合方案:YOLOv8检测车辆、ByteTrack跟踪轨迹、传统或深度学习方法识别车道线,并通过几何计算判断车辆是否违规跨越实线。文章详细介绍了技术难点(如车道线分类、透视变形处理)、判定流程、系统架构和核心代码实现,包括车道线检测、违章逻辑判断和可视化模块。同时指出了现有方案的局限性,建议通过引入逆透视变换和专用车道线分割模型来提升准确率。该纯视觉方案具有低成本、易部署的特点,适用于智能交通监控场景。

u010117029的博客 175

Python闭包函数和装饰器练习

引言 &nbsp;&nbsp;&nbsp;&nbsp;装饰器的大致思想是,闭包函数引用了外部函数的参数(在装饰器里是个函数),因此利用闭包函数除了调用外部函数这个参数函数以外,包装一些其他的功能,试图扩展这个原始函数 参考 &nbsp;&nbsp;&nbsp;&nbsp;具体的装饰器的理论不做过多的解释,网上参考资料很多,例如下面这篇。点击这篇博客查看 代码解读 &nbsp;&nbs...

GuanghaoChen的博客 855

万字详解YOLOv8网络结构Backbone/neck/head以及Conv、Bottleneck、C2f、SPPF、Detect等模块

YOLOv8是由Ultralytics开发的最先进的目标检测模型,推升了速度、准确性和用户友好性的界限。YOLO这一缩写代表“你只看一次”(You Only Look Once),通过在一次网络传递中同时预测所有边界框,提升了算法的效率和实时处理能力。相比之下,其他一些目标检测技术需要经过多个阶段或过程来完成检测。YOLOv8在流行的YOLOv5架构上进行了扩展,在多个方面提供了改进。

专注于图像领域,主要研究内容包括计算机视觉和深度学习,特别是在图像分类、目标检测和图像生成等方面有深入的研究和实践经验。 14万+

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

[博学谷学习记录] 超强总结,用心分享|Python语法练习_装饰器

Python语法练习_装饰器

Allen_人工智能与大数据 369

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

Python中装饰器的综合练习

稍后补充

ymeng9527的博客 218

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Python小练习系列 Vol.13:用装饰器记录函数执行时间

🧩 Python小练习系列 Vol.13:用装饰器记录函数执行时间 > 本节是 Python 小练习系列的一个子题,带你理解并动手写出一个**能实用、可拓展**的装饰器。 --- ## 🎯 练习目标 - 理解 Python 装饰器(Decorator)的工作原理; - 学会使用 `@` 装饰器语法糖; - 编写一个记录函数运行时间的装饰器; - 掌握 `functools.wraps` 的正确使用方式; - 探索装饰器进阶应用场景。

451

python中装饰器的调用及带参数的装饰器

文章目录1 装饰器的定义2 装饰器的调用方式3 处理的原函数中有参数4 处理的原函数中有关键字参数5 处理的原函数中有返回值6.保留被装饰函数的函数名和信息文档7.装饰器的练习练习:创建装饰器,打印被装饰的函数日志信息练习:编写装饰器,参数需要满足条件练习: 1 装饰器的定义 1.把一个函数当作参数,返回一个替代版的函数,本质上就是一个返回函数的函数 2.可以在不改变原函数的基础上,给函数增加功能...

Aimee_c的博客 4181

python16-装饰器

返回函数、闭包、装饰器

qq_31532983的博客 719

Python函数式编程——装饰器

装饰器是一种特殊的函数,用于修改其他函数的行为。它们可以用来扩展或增强原有功能,而无需修改原始函数的代码。

Derrick__1的博客 468

python学习笔记----装饰器

装饰器 装饰器: 把一个函数当作参数,返回一个替代版的函数 本质就是一个返回函数的函数 装饰器的模板 #这是一个装饰器,接收一个函数func作为参数 def decorator(func): #接下来,要建一个对函数func进行处理的函数wrapper(这是装饰器的意义所在嘛) #这个函数是有要求的:1.接收所要处理函数func的参数(以wrapper参数接收)。...

noflag的博客 225

Python——装饰器练习

练习

even160941的博客 317

(四)python之装饰器

python之装饰器的应用

Sean_0819的博客 841

Python- 装饰器

一、装饰器   目录     1、装饰器定义     2、装饰器原则     3、装饰器练习     4、装饰器高级版 二、   1、定义: 本质是函数,就python基础教程是为其他函数附加功能 2、原则: 1、不能修改被装饰的函数的源代码 2、不能修改被修饰的函数的调用方式 3、练习 1 def demo1(func): 2 def doca(*args,**kwargs): 3 func(*args,**kwargs) 4 print('我是显示器')

chinaherolts2008的博客 87

python装饰器

装饰器来自 Decorator 的直译。什么叫装饰,就是装点、提供一些额外的功能。在 python 中的装饰器则是提供了一些额外的功能。装饰器本质上是一个Python函数(其实就是闭包),它可以让其他函数在不需要做任何代码变动的前提下增加额外功能,装饰器的返回值也是一个函数对象。装饰器用于有以下场景,比如:插入日志、性能测试、事务处理、缓存、权限校验等场景。

xiaoyang01234的博客 290
上一篇: python中数据类型
下一篇: 函数及生成器
wl_python
博客等级 码龄9年 21粉丝 28原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值