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://www.mzph.cn/news/778765.shtml

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

相关文章

C++ 多线程和互斥锁(一文搞定)

实验 简介&#xff1a;我们启动并行启动两个线程&#xff0c;但设置一个全局互斥锁&#xff0c;在两个线程中等待并占用互斥锁&#xff0c;然后输出日志。 代码 #include <iostream> #include <thread> /* C 多线程库 */ #include <mutex> …

基于Hive的天气情况大数据分析系统(通过hive进行大数据分析将分析的数据通过sqoop导入到mysql,通过Django基于mysql的数据做可视化)

基于Hive的天气情况大数据分析系统&#xff08;通过hive进行大数据分析将分析的数据通过sqoop导入到mysql&#xff0c;通过Django基于mysql的数据做可视化&#xff09; Hive介绍&#xff1a; Hive是建立在Hadoop之上的数据仓库基础架构&#xff0c;它提供了类似于SQL的语言&…

2015年认证杯SPSSPRO杯数学建模A题(第二阶段)绳结全过程文档及程序

2015年认证杯SPSSPRO杯数学建模 A题 绳结 原题再现&#xff1a; 给绳索打结是人们在日常生活中常用的技能。对登山、航海、垂钓、野外生存等专门用途&#xff0c;结绳更是必不可少的技能之一。针对不同用途&#xff0c;有多种绳结的编制方法。最简单的绳结&#xff0c;有时称…

机器学习和深度学习的简单对比

如图1-2所示&#xff0c;深度学习&#xff08;DeepLearning&#xff0c;DL&#xff09;属于机器学习的子类。它的灵感来源于人类大脑的工作方式&#xff0c;这是利用深度神经网络来解决特征表达的一种学习过程。深度神经网络本身并非是一个全新的概念&#xff0c;可理解为包含多…

实战 | 微调训练TrOCR识别弯曲文本

导 读 本文主要介绍如何通过微调训练TrOCR实现弯曲文本识别。 背景介绍 TrOCR&#xff08;基于 Transformer 的光学字符识别&#xff09;模型是性能最佳的 OCR 模型之一。在我们之前的文章中&#xff0c;我们分析了它们在单行打印和手写文本上的表现。 TrOCR—基于Transforme…

系统分析师-数学与经济管理

系统架构设计师 系统架构设计师-软件开发模型总结 文章目录 系统架构设计师前言一、最小生成树二、最短路径三、网络与最大流量四、不确定型决策 前言 数学是一种严谨、缜密的科学&#xff0c;学习应用数学知识&#xff0c;可以培养系统架构设计师的抽象思维能力和逻辑推理能…

【Python】python+requests+excel+unittest+ddt实现接口自动化实例

目录 测试需求实现思路框架代码实例1. 环境准备和配置文件2. Excel接口数据及测试结果3. API封装4. 读取Excel数据5. 测试用例6. 日志和配置文件处理7. HTMLTestRunner生成可视化的html报告8. 报告通过飞书/邮件发送报告通过飞书发送报告通过邮件发送9. 入口函数10. 飞书Webhoo…

Git 命令总览

Git Git 是一个版本控制系统&#xff0c;用于管理项目代码。通过 Git 可以轻松地进行代码的提交、更新和合并&#xff0c;确保项目代码的安全性和稳定性。同时&#xff0c;Git 还提供了丰富的工具和功能&#xff0c;如分支管理、代码审查、版本回退等&#xff0c;帮助开发更好…

五种免费的Python开发环境及具体下载网址

五种免费的Python开发环境及具体下载网址 目录 五种免费的Python开发环境及具体下载网址1.Anaconda2.PyCharm Community Edition3.Visual Studio Code4.Jupyter Notebook5. WinPython Python编程可选择不同的开发工具环境进行&#xff0c;本文介绍五种常用的&#xff0c;读者可…

vue前端工程化

前言 本文介绍的是有关于vue方面的前端工程化实践&#xff0c;主要通过实践操作让开发人员更好的理解整个前端工程化的流程。 本文通过开发准备阶段、开发阶段和开发完成三个阶段开介绍vue前端工程化的整体过程。 准备阶段 准备阶段我将其分为&#xff1a;框架选择、规范制…

JSP技术及其应用

目录 一、JSP 指令元素 1. page指令 二、JSP 注释 1. HTML注释&#xff1a; 2. Java注释&#xff1a; 3. JSP注释&#xff1a; 三、页面编码格式 1. pageEncoding&#xff1a; 2. contentType&#xff1a; 一、JSP 指令元素 JSP包含三种主要的指令元素&#xff1a;pag…

SQL-CRUD-2数据库实验

目录 第一关任务描述 相关知识 插入完整内容的行 插入选定内容的行 编程要求 测试说明 第一关代码 第二关任务描述 相关知识 删除表中的指定行 删除表中的所有行 编程要求 测试说明 第二关代码 第三关任务描述 相关知识 更新表中的指定行 编程要求 测试说明…

【Pytorch入门】小土堆PyTorch入门教程完整学习笔记(详细笔记并附练习代码 ipynb文件)

小土堆PyTorch入门教程笔记 最近在观看PyTorch深度学习快速入门教程&#xff08;绝对通俗易懂&#xff01;&#xff09;【小土堆】顺便做点笔记&#xff0c;方便回看&#xff0c;同时也希望记录的笔记能够帮助到更多在入门的小伙伴~ 【注】仅记录个人觉得重要的知识&#xff0c…

cas学习2:idea里搭建cas项目

在上篇中介绍了cas服务在tomcat中怎么启动的及某j集成cas&#xff0c;这篇讲下idea怎么集成cas成一个项目&#xff0c;为后续的定制自己的项目做好铺垫。 1.下载CAS 模板 Overlay Template&#xff0c;我这里使用 Apereo CAS 5.3 版本&#xff0c;JDK需要1.8 地址&#xff1a…

JavaWeb后端——HTTP协议/Tomcat

HTTP HTTP协议&#xff1a;无状态&#xff0c;对事务处理没有记忆能力。每次请求-响应都是独立的。后一次请求不会记录前一次请求数据。缺点&#xff1a;多次请求之间不能共享数据&#xff0c;优点&#xff1a;速度快。 HTTP协议请求报文&#xff1a; HTTP协议响应报文&#x…

JVM篇详细分析

JVM总体图 程序计数器&#xff1a; 线程私有的&#xff0c;每个线程一份&#xff0c;内部保存字节码的行号&#xff0c;用于记录正在执行字节码指令的地址。&#xff08;可通过javap -v XX.class命令查看&#xff09; java堆&#xff1a; 线程共享的区域&#xff0c;用来保存对…

MATLAB:优化与规划问题

一、线性规划 % 线性规划&#xff08;Linear programming, 简称LP&#xff09; fcoff -[75 120 90 105]; % 目标函数系数向量 A [9 4 7 54 5 6 105 10 8 53 8 9 77 6 4 8]; % 约束不等式系数矩阵 b [3600 2900 3000 2800 2200]; % 约束不等式右端向量 Aeq []; % 约束等式系…

实验2-spark编程

实验目的 &#xff08;1&#xff09;通过实验掌握Spark的基本编程方法&#xff1b; &#xff08;2&#xff09;熟悉RDD到DataFrame的转化方法&#xff1b; &#xff08;3&#xff09;熟悉利用Spark管理来自不同数据源的数据。 实验内容 1&#xff0e;Spark基本操作 请参照…

ROUYI框架地址

1、原版系统地址与文档 https://gitee.com/dromara/RuoYi-Cloud-Plus?_fromgitee_search 源码地址 https://plus-doc.dromara.org/#/ruoyi-cloud-plus/home 后端地址 https://plus-doc.dromara.org/#/plus-ui/home 前端地址 前端代码地址&#xff1a; RuoYi-Vue-Plus: 多租户…

maven的依赖继承

先说一下创建子maven工程的步骤 继承 继承的作用&#xff1a;在父工程中&#xff0c;统一管理项目中的依赖信息&#xff0c;进行统一的版本控制 继承的背景是&#xff1a;对一个大型的项目进行了模块拆分&#xff0c;一个project下&#xff0c;创建了很多的module&#xff0c…