Python学习:lambda(匿名函数)、装饰器、数据结构

news2024/9/21 12:40:30

Python Lambda匿名函数

Lambda函数(或称为匿名函数)是Python中的一种特殊函数,它可以用一行代码来创建简单的函数。Lambda函数通常用于需要一个函数作为输入的函数(比如map()filter()sort()等)或者用来编写简洁的代码。
在这里插入图片描述

Lambda函数的语法如下:

lambda arguments: expression

其中,lambda关键字标识这是一个Lambda函数,arguments是函数的参数,并且只能包含一个表达式作为函数体。

下面是一个简单的示例,展示了如何使用Lambda函数计算一个数的平方:

square = lambda x: x**2
print(square(5))  # 输出25

Lambda函数通常与内置函数一起使用,例如map()filter()reduce()等。下面是一个示例:

  1. 使用map()和Lambda函数将列表中每个元素都平方,并返回新的列表:
numbers = [1, 2, 3, 4, 5]
squared_numbers = list(map(lambda x: x**2, numbers))
print(squared_numbers)  # 输出[1, 4, 9, 16, 25]
  1. 使用filter()和Lambda函数过滤出列表中的偶数:
numbers = [1, 2, 3, 4, 5]
even_numbers = list(filter(lambda x: x % 2 == 0, numbers))
print(even_numbers)  # 输出[2, 4]

Lambda函数还可以用在排序等场景以及其他需要简单函数的地方。

总的来说,Lambda函数提供了一种简洁的方式来定义小型函数,但由于其限制性,在复杂逻辑中最好还是使用普通的命名函数。

Python 装饰器

装饰器(Decorator)是Python中一种强大而灵活的函数工具,它用于修改、扩展或包装其它函数或方法的行为。装饰器可以在不修改原函数代码的情况下,增加额外的功能或逻辑。
在这里插入图片描述

  1. 基本概念

    • 装饰器本质上是一个函数,接受一个函数作为参数,并返回一个新的函数。
    • 使用@decorator语法(语法糖),在函数定义前加上装饰器的名称。
  2. 示例

def my_decorator(func):
    def wrapper():
        print("Something is happening before the function is called.")
        func()
        print("Something is happening after the function is called.")
    return wrapper

@my_decorator
def say_hello():
    print("Hello!")

say_hello()

以上示例中,my_decorator是一个装饰器函数,它在调用say_hello函数前后分别打印了一些信息。

  1. 类装饰器:除了函数装饰器,装饰器还可以是类。类装饰器通常实现__call__()方法来充当装饰器。

  2. 带参数的装饰器:装饰器也可以带参数,需要多层嵌套。例如:

def repeat(num_times):
    def decorator_repeat(func):
        def wrapper(*args, **kwargs):
            for _ in range(num_times):
                result = func(*args, **kwargs)
            return result
        return wrapper
    return decorator_repeat

@repeat(num_times=3)
def greet(name):
    print(f"Hello, {name}!")

greet("Alice")

以上示例中,repeat是带参数的装饰器,它可以指定调用被装饰函数的次数。

装饰器是Python中对函数进行包装和修饰的非常重要的工具,能够提高代码复用性、可读性和简洁性。

Python 数据结构列表

在Python中,列表(List)是一种数据结构,用于存储多个元素的有序集合。列表是可变的(Mutable),可以包含不同类型的元素,并且允许重复元素。

以下是关于Python列表的一些重要特点和常用操作:

  1. 创建列表
my_list = ['apple', 'banana', 'cherry']
empty_list = []
mixed_list = [1, 'hello', 3.14, True]
  1. 访问列表元素:可以通过索引访问列表中的元素,索引从0开始。
print(my_list[0])  # 输出 'apple'
  1. 切片操作:可以使用切片操作符:获取子列表。
print(my_list[1:3])  # 输出 ['banana', 'cherry']
  1. 修改列表:可以通过索引赋值来修改列表中的元素。
my_list[1] = 'orange'
print(my_list)  # 输出 ['apple', 'orange', 'cherry']
  1. 内置方法:Python提供了许多方法来操作列表,比如append()insert()remove()pop()等。
my_list.append('grape')
print(my_list)  # 输出 ['apple', 'orange', 'cherry', 'grape']
  1. 列表迭代:可以使用循环遍历列表中的元素。
for fruit in my_list:
    print(fruit)
  1. 列表推导式:一种简洁的方式来创建新列表。
numbers = [1, 2, 3, 4, 5]
squared_numbers = [x**2 for x in numbers]
print(squared_numbers)  # 输出 [1, 4, 9, 16, 25]
  1. 其他操作:列表还支持合并、复制、排序等操作,具体取决于需求。

Python的列表是非常灵活和强大的数据结构,适用于各种场景下的数据存储和处理。

Python 列表当做堆栈

在Python中,你可以使用列表来模拟堆栈(Stack)的行为。堆栈是一种后进先出(LIFO,Last In First Out)的数据结构,类似于一个弹簧组成的堆叠。

下面是如何将列表当做堆栈来使用的一些简单示例:

  1. 压入元素到堆栈:使用append()方法将元素压入堆栈的顶部。
stack = []
stack.append('A')  # 压入元素'A'
stack.append('B')  # 压入元素'B'
print(stack)  # 输出 ['A', 'B']
  1. 弹出元素:使用pop()方法从堆栈的顶部弹出元素。
top_element = stack.pop()  # 弹出'B'
print(top_element)  # 输出 'B'
print(stack)  # 输出 ['A']
  1. 查看堆栈顶部元素:可以使用索引访问堆栈顶部元素。
top_element = stack[-1]  # 获取顶部元素,不弹出
print(top_element)  # 输出 'A'

通过以上操作,你可以使用Python的列表来实现对应堆栈的功能。当你需要一个后进先出的数据结构时,堆栈是一个不错的选择。

Python 列表当做队列

在Python中,虽然列表可以用作堆栈(Stack),但如果要实现队列(Queue)的先进先出(FIFO,First In First Out)行为,则推荐使用collections.dequecollections.deque是Python标准库中提供的双端队列数据结构,支持高效的插入和删除操作,适合用作队列。

下面是如何使用collections.deque来模拟队列的一些基本示例:

  1. 创建队列:首先需要导入collections模块,并创建一个双端队列:
from collections import deque

queue = deque()
  1. 向队列中添加元素:使用append()方法将元素添加到队列的尾部。
queue.append('A')
queue.append('B')
queue.append('C')
print(queue)  # 输出 deque(['A', 'B', 'C'])
  1. 从队列中弹出元素:使用popleft()方法从队列的头部弹出元素。
element = queue.popleft()
print(element)  # 输出 'A'
print(queue)  # 输出 deque(['B', 'C'])
  1. 查看队列头部元素:使用queue[0]访问队列的头部元素,但不会删除元素。
head_element = queue[0]
print(head_element)  # 输出 'B'

通过以上操作,你可以使用collections.deque实现队列的基本功能。在需要时,可以根据实际需求选择不同的数据结构来模拟不同的数据结构行为。

关注我,不迷路,共学习,同进步

关注我,不迷路,共学习,同进步

Python

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1553108.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

fast_bev学习笔记

目录 一. 简述二. 输入输出三. github资源四. 复现推理过程4.1 cuda tensorrt 版 一. 简述 原文:Fast-BEV: A Fast and Strong Bird’s-Eye View Perception Baseline FAST BEV是一种高性能、快速推理和部署友好的解决方案,专为自动驾驶车载芯片设计。该框架主要包…

ssm婚纱摄影管理系统的设计+1.2w字论文+免费调试

项目演示视频: ssm婚纱摄影管理系统的设计 项目介绍: 随着现在网络的快速发展,网上管理系统也逐渐快速发展起来,网上管理模式很快融入到了许多商家的之中,随之就产生了“婚纱摄影网的设计”,这样就让婚纱摄影网的设计更…

IDEA跑Java后端项目提示内存溢出

要设置几个地方,都试一下吧: 1、默认是700,我们设置大一点(上次配置了这儿就解决了) 2、 3、 4、-Xmx4g

Linux基础命令篇:文本处理命令基础操作(awk、sed、sort、uniq、wc)

Linux基础命令之文件处理 1. awk awk是一种文本处理工具,用于处理结构化文本数据。它基于模式匹配和动作来处理输入数据。以下是一些常用的awk选项和示例: 1.1- 打印指定字段:awk { print $1, $3 } input-file(打印输入文件中的…

【YOLOv5改进系列(6)】高效涨点----使用DAMO-YOLO中的Efficient RepGFPN模块替换yolov5中的Neck部分

文章目录 🚀🚀🚀前言一、1️⃣ 添加yolov5_GFPN.yaml文件二、2️⃣添加extra_modules.py代码三、3️⃣yolo.py文件添加内容3.1 🎓 添加CSPStage模块 四、4️⃣实验结果4.1 🎓 使用yolov5s.pt训练的结果对比4.2 ✨ 使用…

Javascript 数字精度丢失的问题(超级详细的讲解)

文章目录 一、场景复现二、浮点数二、问题分析小结 三、解决方案参考文献 一、场景复现 一个经典的面试题 0.1 0.2 0.3 // false为什么是false呢? 先看下面这个比喻 比如一个数 130.33333333… 3会一直无限循环,数学可以表示,但是计算机要存储&a…

Linux下iptables实战指南:Ubuntu 22.04安全配置全解析

Linux下iptables实战指南:Ubuntu 22.04安全配置全解析 引言iptables基础知识工作原理组件介绍 iptables规则管理添加规则修改规则删除规则规则持久化 常见的iptables应用场景防止DDoS攻击限制访问速率端口转发日志管理 高级配置和技巧基于时间的规则基于用户的规则结…

语音模块摄像头模块阿里云结合,实现垃圾的智能识别

语音模块&摄像头模块&阿里云结合 文章目录 语音模块&摄像头模块&阿里云结合1、实现的功能2、配置2.1 软件环境2.2 硬件配置 3、程序介绍3.1 程序概况3.2 语言模块SDK配置介绍3.3 程序文件3.3.1 开启摄像头的程序3.3.2 云端识别函数( Py > C ) & 串口程序…

【实现报告】学生信息管理系统(顺序表)

目录 实验一 线性表的基本操作 一、实验目的 二、实验内容 三、实验提示 四、实验要求 五、实验代码如下: (一)顺序表的构建及初始化 (二)检查顺序表是否需要扩容 (三)根据指定学生个…

Redis命令-List命令

4.6 Redis命令-List命令 Redis中的List类型与Java中的LinkedList类似,可以看做是一个双向链表结构。既可以支持正向检索和也可以支持反向检索。 特征也与LinkedList类似: 有序元素可以重复插入和删除快查询速度一般 常用来存储一个有序数据&#xff…

工控安全双评合规:等保测评与商用密码共铸新篇章

01.双评合规概述 2017年《中华人民共和国网络安全法》开始正式施行,网络安全等级测评工作也在全国范围内按照相关法律法规和技术标准要求全面落实实施。2020年1月《中华人民共和国密码法》开始正式施行,商用密码应用安全性评估也在有序推广和逐步推进。…

Day60-Nginx反向代理与负载均衡基于URI及USER_AGENT等跳转讲解

Day60-Nginx反向代理与负载均衡基于URI及USER_AGENT等跳转讲解 9. 基于uri实现动静分离、业务模块分离调度企业案例(参考书籍)10.基于user_agent及浏览器实现转发(参考书籍)11.根据文件扩展名实现代理转发12. Nginx负载均衡监测节点状态13.proxy_next_up…

FPGA高端项目:解码索尼IMX327 MIPI相机转HDMI输出,提供FPGA开发板+2套工程源码+技术支持

目录 1、前言2、相关方案推荐本博主所有FPGA工程项目-->汇总目录我这里已有的 MIPI 编解码方案 3、本 MIPI CSI-RX IP 介绍4、个人 FPGA高端图像处理开发板简介5、详细设计方案设计原理框图IMX327 及其配置MIPI CSI RX图像 ISP 处理图像缓存HDMI输出工程源码架构 6、工程源码…

C/C++ ③ —— C++11新特性

1. 类型推导 1.1 auto auto可以让编译器在编译期就推导出变量的类型 auto的使⽤必须⻢上初始化,否则⽆法推导出类型auto在⼀⾏定义多个变量时,各个变量的推导不能产⽣⼆义性,否则编译失败auto不能⽤作函数参数在类中auto不能⽤作⾮静态成员…

构建智能未来:探索AI人工智能产品业务架构的创新之路

随着人工智能技术的快速发展,AI人工智能产品在各行各业中扮演着越来越重要的角色。本文将深入探讨AI人工智能产品业务架构的创新之路,探讨如何构建智能未来的商业生态。 ### AI人工智能产品业务架构的重要性 AI人工智能产品的业务架构是支撑产品成功的…

Zookeeper的选主流程

Zookeeper的核心是原子广播,这个机制保证了各个Server之间的同步。实现这个机制的协议叫做Zab协议。Zab协议有两种模式,它们分别是恢复模式(选主)和广播模式(同步)。当服务启动或者在领导者崩溃后&#xff…

学习vue3第十二节(组件的使用与类型)

1、组件的作用用途 目的: 提高代码的复用度,和便于维护,通过封装将复杂的功能代码拆分为更小的模块,方便管理, 当我们需要实现相同的功能时,我们只需要复用已经封装好的组件,而不需要重新编写相…

信息系统项目管理师——第10章项目进度管理(重要)

本章节内容属于10大管理知识领域中的重中之重,选择、案例、论文都会考,需要完全掌握。 选择题,大概考3分左右,有的时候会考一点理论大多数都是考计算。 案例题,必考内容,各种类型的计算题,网络图…

基于SpringBoot的“招聘信息管理系统”的设计与实现(源码+数据库+文档+PPT)

基于SpringBoot的“招聘信息管理系统”的设计与实现(源码数据库文档PPT) 开发语言:Java 数据库:MySQL 技术:SpringBoot 工具:IDEA/Ecilpse、Navicat、Maven 系统展示 系统功能结构图 系统首页界面图 企业招聘界面…

免费软件“蓝莓投屏”:支持多个Airplay同时镜像的投屏软件。

引言: 由于定制盒子(3288)不支持投屏功能(有些5.1不支持,安卓4.X本身也不支持),需要借助第三方的投屏软件来实现这一需求。所以,研究半天,蓝莓投屏以其简便易用的特性脱颖而出,只需…