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 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

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

boost::asio::ip::tcp/udp::socket::release 函数为什么限制 Windows 8.1 才可以调用?

如本文题目所示,这是因为只有在 Windows 8.1(Windows Server 2012 RC)及以上 Windows 操作版本才提供了运行时,修改/删除完成端口关联的ABI接口。 boost::asio 在 release 函数底层实现之中是调用了 FileReplaceCompletionInform…

(完结)Java项目实战笔记--基于SpringBoot3.0开发仿12306高并发售票系统--(三)项目优化

本文参考自 Springboot3微服务实战12306高性能售票系统 - 慕课网 (imooc.com) 本文是仿12306项目实战第(三)章——项目优化,本篇将讲解该项目最后的优化部分以及一些压测知识点 本章目录 一、压力测试-高并发优化前后的性能对比1.压力测试相关…

Modelsim手动仿真实例

目录 1. 软件链接 2. 为什么要使用Modelsim 3. Modelsim仿真工程由几部分组成? 4. 上手实例 4.1. 新建文件夹 4.2. 指定目录 4.3. 新建工程 4.4. 新建设计文件(Design Files) 4.5. 新建测试平台文件(Testbench Files&…

H7310 线性恒流调光芯片 支持24V30V48V60V100V转3.3V5V12V1.5A 外围简单 性价比高

线性恒流调光芯片是一种能够将输入电压稳定转换为恒定电流输出的电子设备,同时支持调光功能。这种芯片通常具有较高的效率和稳定性,适用于LED照明、显示屏等领域。 针对您提到的支持24V、30V、48V、60V、100V转3.3V、5V、12V,并且能够提供1.…

二十九 超级数据查看器 讲解稿 查询复用

二十九 超级数据查看器 讲解稿 查询复用 ​点击此处 以新页面 打开B站 播放当前教学视频 点击访问app下载页面 百度手机助手 下载地址 大家好,今天我们讲一下超级数据查看器的查询复用功能,这是新版本要增加的功能,这讲是预告。 先介绍…

数据可视化Grafana Windows 安装使用教程(中文版)

1.跳转连接 天梦星服务平台 (tmxkj.top)https://tmxkj.top/#/site?url 2.下载应用程序 官网地址:Grafana get started | Cloud, Self-managed, Enterprisehttps://grafana.com/get/ 3.修改配置文件 grafana\conf\defaults 4.启动\bin\目录下serve应用程序 浏…

机器学习——降维算法-主成分分析(PCA)

机器学习——降维算法-主成分分析(PCA) 在机器学习领域,主成分分析(Principal Component Analysis,简称PCA)是一种常用的降维技术,用于减少数据集中特征的数量,同时保留数据集的主要…

尾矿库在线安全监测:提升矿山安全水平

在矿山安全领域,尾矿库的安全管理尤为关键。尾矿库作为矿山生产链条的重要环节,其稳定性不仅关系到生产活动的持续进行,更直接影响着周边环境和人民群众的生命财产安全。因此,尾矿库的安全监测显得尤为重要。近年来,随…

YOLOv9改进策略 : C2f改进 | 引入YOLOv8 C2f结构

💡💡💡本文改进内容:应订阅者需求,如何将YOLOv8 C2f结构引入到YOLOv9 💡💡💡C2f层是一种特殊的卷积层,用于将不同尺度的特征图融合在一起,以提高目标检测的准…

XXE漏洞知识及ctfshow例题

XXE漏洞相关知识 XXE全称为XML Enternal Entity Injection 中文叫xml外部实体注入 什么是xml 简单了解XML: (xml和html的区别可以简易的理解成:xml是用来储存数据和传输数据的而html是用来将数据展现出来) XML 指可扩展标记语…

UE5数字孪生系列笔记(三)

C创建Pawn类玩家 创建一个GameMode蓝图用来加载我们自定义的游戏Mode新建一个Pawn的C,MyCharacter类作为玩家,新建一个相机组件与相机臂组件,box组件作为根组件 // Fill out your copyright notice in the Description page of Project Set…

【力扣】300. 最长递增子序列(DFS+DP两种方法实现)

目录 题目传送最长递增子序列[DFS 方法]DFS方法思路图思路简述代码大家可以自行考虑有没有优化的方法 最长递增子序列[DP]方法DP方法思路图思路简述代码方案 题目传送 原题目链接 最长递增子序列[DFS 方法] DFS方法思路图 思路简述 对于序列中的每一个数字只有选择和不选择两…

C语言查找-----------BF算法KMP算法

1.问题引入 有一个主字符串,有一个子字符串,要求我们寻找子字符串在主字符串里面开始出现的位置; 2.BF算法 BF算法就是暴力算法,这个做法虽然效率不高,但是按照我们传统的思路依然能够得到结果,接下来我们…

LeetCode 523. 连续的子数组和

解题思路 相关代码 class Solution {public boolean checkSubarraySum(int[] nums, int k) {int s[] new int[nums.length1];for(int i1;i<nums.length;i) s[i]s[i-1]nums[i-1];Set<Integer> set new HashSet<>(); for(int i2;i<nums.length;i){set.ad…

filebox在线文件管理工具V1.11.1.1查分吧修改自用版免费分享[PHP]

* 基于:https://down.chinaz.com/soft/35899.htm * 查分吧 修改自用版今日对外分享(自2016年1.10版本以来一直用他云开发:Web环境即时看效果) * 也可以用于本人很多txt/csv通用查询系统的在线管理后台管理数据 * 默认登陆账号filebox密码nidemima * 修改账号密码:21-22行;获取…

Java八股文(K8S)

Java八股文のK8S K8S K8S 请解释什么是Kubernetes&#xff1f; Kubernetes是一个开源的容器编排和管理工具&#xff0c;用于自动化部署、扩展和管理容器化应用程序。 请解释Kubernetes中的Pod、Deployment和Service之间的关系。 ● Pod是Kubernetes的最小部署单元&#xff0c;…

练习 13 Web [极客大挑战 2019]Secret File

php伪协议请求&#xff0c;php代码审计 参考&#xff1a;BUUCTF__[极客大挑战 2019]Secret File_题解 没有任何上传和登录页面 查看前端源码 发现 <a id"master" href"./Archive_room.php" style"background-color:#000000;height:70px;width:20…

【java9】java9新特性值之集合不可变实例工厂方法

Java9为集合接口List、Set、Map提供了创建不可变实例的工厂方法。这些工厂方法为便利而生&#xff0c;以简单的方式创建这些集合的不可变实例。 Java9之前创建不可变集合 在Java9之前&#xff0c;创建不可变集合通常需要通过其他方式&#xff0c;比如使用Collections.unmodif…

day4 linux上部署第一个nest项目(java转ts全栈/3R教室)

背景&#xff1a;上一篇吧nest-vben-admin项目&#xff0c;再开发环境上跑通了&#xff0c;并且build出来了dist文件&#xff0c;接下来再部署到linux试试吧 dist文件夹是干嘛的&#xff1f; 一个pnpn install 直接生成了两个dist文件夹&#xff0c;前端admin项目一个&#xf…

用Kimichat快速识别出图片中的表格保存到Excel

如果有一张图片格式的表格&#xff0c;想要快速复制到Excel表格中&#xff0c;那么一般要借助于OCR工具。之前试过不少在线OCR工具&#xff0c;识别效果差强人意。其实&#xff0c;kimichat就可以非常好的完成这个任务。 下面是一张研报中的表格&#xff0c;只能以图片形式保存…