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

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 resultreturn wrapperreturn 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 dequequeue = 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://xiahunao.cn/news/2905314.html

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

相关文章

基于SpringBoot和Vue的在线视频教育平台的设计与实现

今天要和大家聊的是一款基于SpringBoot和Vue的在线视频教育平台的设计与实现 !!! 有需要的小伙伴可以通过文章末尾名片咨询我哦!!! 💕💕作者:李同学 💕&…

MybatisPlus速成

MybatisPlus快速入门 快速入门入门案例常见注解常见配置 核心功能条件构造器自定义SQLService接口 扩展功能代码生成静态工具逻辑删除枚举处理器JSON处理器 插件功能分页插件通用分页实体 参考文档 mybatis-plus参考文档 全部资料链接 讲义 快速入门 入门案例 <dependency…

打造快乐成长的乐园:探索少儿教育项目的魅力

在当今社会&#xff0c;家长们越来越重视孩子的全面发展和个性培养&#xff0c;少儿教育项目因其独特的魅力吸引着越来越多的关注。本文将探讨少儿教育项目的特点、重要性&#xff0c;以及如何打造一个快乐成长的教育乐园。 ### 少儿教育项目的价值 少儿教育项目不仅仅是传授…

【数据结构】带头双向链表的实现

&#x1f451;个人主页&#xff1a;啊Q闻 &#x1f387;收录专栏&#xff1a;《数据结构》 &#x1f389;道阻且长&#xff0c;行则将至 前言 带头双向链表是链表的一种&#xff0c;相较于单链表的实现&#xff0c;其更为简单 一.初识带头双向循环链表 带头…

Ribbon简介

目录 一 、概念介绍 1、Ribbon是什么 2、认识负载均衡 2.1 服务器端的负载均衡 2.2 客户端的负载均衡 3、Ribbon工作原理 4、Ribbon的主要组件 IClientConfig ServerList ServerListFilter IRule Iping ILoadBalancer ServerListUpdater 5、Ribbon支持…

I.MX6ULL_Linux_系统篇(25) buildroot文件系统构建

前面我们学习了如何使用 busybox 来构建根文件系统&#xff0c;但是 busybox 构建的根文件系统不齐全&#xff0c;很多东西需要我们自行添加&#xff0c;比如 lib 库文件。在我们后面的驱动开发中很多第三方软件也需要我们自己去移植&#xff0c;这些第三方软件有很多又依赖其他…

CorelDRAW25.0.0.230中文最新开心和谐版本

CorelDRAW是一款非常流行的矢量图形设计软件&#xff0c;其25.0.0.230版本带来了许多新特性和更新内容。以下是我所能提供的相关信息&#xff1a; 首先&#xff0c;关于特性方面&#xff0c;CorelDRAW 25.0.0.230版本具有强大的矢量编辑功能&#xff0c;用户可以轻松创建和编辑…

MoneyPrinterTurbo搭建详细流程(Linux)及常见问题

先附上链接: MoneyPrinterTurbohttps://github.com/harry0703/MoneyPrinterTurboMoneyPrinterTurbo是一款合成视频的软件。 你只需要提供一个主题或者关键字,就可以全自动生成视频文案、视频素材、视频字幕、视频背景音乐,然后合成一个高清的短视频。 接下来讲解详细的搭…

动态规划刷题(算法竞赛、蓝桥杯)--导弹拦截(线性DP)

1、题目链接&#xff1a;[NOIP1999 提高组] 导弹拦截 - 洛谷 #include <bits/stdc.h> using namespace std; const int N2e55; int a[N],x,n; int b[N],len;int main(){while(cin>>x)a[n]x;//求最长不上升子序列 b[0]2e9;//初始化为无穷大for(int i1;i<n;i){if(…

金属氧化物压敏电阻的冲击破坏机理高能压敏电阻分析

以氧化锌为主的金属氧化物阀片在一定的电压和电流作用下的破坏可分为热破坏和冲击破坏两类。 热破坏是指氧化锌电阻在交流电压持续作用时发生的破坏,即由于阀片在交流作用下的发热超过了其散热能力而导致的热平衡失控的现象。交流引起的热破坏可以分为几种不同情况:一种是由于…

康耐视visionpro-CogFindCircleTool工具详细说明

CogFindCircleTool功能说明: 通过用多个卡尺找到多个点来拟合所要找的圆 CogFindCircleTool操作说明: ①.打开工具栏,双击或点击鼠标拖拽添加CogFindCircleTool工具 ②.添加输入图像,右键“链接到”或以连线拖拽的方式选择相应输入源 ③.预期的圆弧:设置预期圆弧的中心点…

Zookeeper的选主流程

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

【RISC-V】如何使用release的risc-v gnu toolchain

riscv64-elf-ubuntu-22.04-gcc-nightly-2024.03.01-nightly.tar.gz 首先去release页面中获取相应的压缩包 将压缩包解压到想解压的位置&#xff0c;这里我选择了 mv Downloads/riscv64-elf-ubuntu-22.04-gcc-nightly-2024.03.01-nightly.tar.gz riscv64-tool-chain/然后解压…

稀碎从零算法笔记Day26-LeetCode:跳跃游戏

断更多天&#xff0c;懒狗ex 题型&#xff1a;数组、模拟、类似双指针&#xff1f; 链接&#xff1a;55. 跳跃游戏 - 力扣&#xff08;LeetCode&#xff09; 来源&#xff1a;LeetCode 题目描述 给你一个非负整数数组 nums &#xff0c;你最初位于数组的 第一个下标 。数组…

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

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

PHP图床程序优化版:图片外链服务、图床API服务、图片CDN加速与破解防盗链

图片免费上传 支持本地储存、FTP储存、第三方云储存&#xff08;阿里云 OSS、腾讯云 COS、七牛云等&#xff09;。 图片外链加速 一键转换第三方网站的图片外链地址为图床可分享的图片地址&#xff08;支持CDN&#xff09;。 图片解析服务 直接将第三方外链图片地址显示为…

【spring】AbstractApplicationContext 的refresh() 方法学习

上一篇我们一起学习了【spring】FileSystemXmlApplicationContext 类学习 AbstractApplicationContext 的refresh() 方法介绍 AbstractApplicationContext的refresh()方法仍然是整个Spring应用程序上下文初始化的核心流程入口。大体上的刷新生命周期依然保持一致。 refresh(…

基于Spring boot + Vue协同过滤算法的电影推荐系统

末尾获取源码作者介绍&#xff1a;大家好&#xff0c;我是墨韵&#xff0c;本人4年开发经验&#xff0c;专注定制项目开发 更多项目&#xff1a;CSDN主页YAML墨韵 学如逆水行舟&#xff0c;不进则退。学习如赶路&#xff0c;不能慢一步。 目录 一、项目简介 二、开发技术与环…

[RoarCTF 2019]Online Proxy --不会编程的崽

这几天也是ctf做得有点头疼了。好些序列化的题没碰&#xff0c;一直做些sql注入类的题目。闲来无事&#xff0c;在更一次sql注入吧。 整个页面就这点信息。首先想想为什么他能获取你的ip。猜测是数据包X-Forwarded-For。 它还输出上次访问页面客户端的ip。很明显了&#xff0c…

可视化图表:饼图,展示数据的比例关系。

Hi&#xff0c;我是贝格前端工场的老司机&#xff0c;本文分享可视化图表设计的饼图设计&#xff0c;欢迎老铁持续关注我们。 可视化饼图是一种常用的数据展示方式&#xff0c;它以圆形图表的形式展示数据的比例关系。饼图通过将数据按照比例划分成不同的扇区&#xff0c;每个…