当前位置: 首页 > news >正文

PYTHON学习笔记9(匿名函数、装饰器、数据结构)

匿名函数

python使用lambda来创建匿名函数,不需要使用def关键字定义完整函数。lambda函数是一种小型、匿名、内联的函数,可以具有任意数量的参数,但只能有一个表达式。通常用于编写简单的、单行的函数,通常在需要函数作为参数传递的情况下使用。

lambda函数有以下特点:1、是匿名的,没有函数名称,只能通过赋值给变量或作为参数传递给其他函数来使用。2、通常只包含一行代码

语法格式

lambda arguments:expression #lambda是关键字,用于定义lambda函数 #arguments是参数列表,可以包含零个或多个参数 #expression是一个表达式,用于计算并返回函数的结果

下面分别是零参数、一个参数和多个参数的匿名函数的例子:

#没有参数的匿名函数 f = lambda:'hello' print(f()) #输出结果:hello #有参数的匿名函数 x = lambda a : a * a print(x(3)) #输出结果:9 #多个参数的匿名函数 y = lambda a,b : a * b print(y(2,3)) #输出结果:6

lambda函数通常与内置函数(如map、filter等函数)一起使用,以便在集合上执行操作。

num = [1,2,3,4,5] squared = list(map(lambda x: x*x, num)) print(squared) #输出结果:[1, 4, 9, 16, 25]

装饰器

装饰器是python中的一种高级功能,允许我们动态的修改函数或类的行为。装饰器是一种函数,它接收一个函数作为参数,并返回一个新的函数或修改原来的函数。

装饰器语法:@decorator_name,python还提供了一些内置的装饰器,如@staticmethod(定义静态方法),@classmethod(定义类方法)。

装饰器应用场景:

  • 日志记录:装饰器可用于记录函数的调用信息、参数和返回值
  • 性能分析:可用于使用装饰器来测量函数的执行时间
  • 权限控制:可用于限制对某些函数的访问权限
  • 缓存:可用于实现对函数结果的缓存,以提高性能

基本语法

装饰器本质是一个接收函数作为输入并返回一个新的包装过后的函数的对象。通过装饰器,可以在保持代码整洁的同时,灵活高效地扩展程序的功能。

下面是一个装饰器的例子:

decorator是一个装饰器函数,它接收一个函数func作为参数,然后返回一个内部函数wrapper,在wrapper函数内部,可以执行一些额外的操作,然后调用原始函数func,并返回其结果。在下面的例子中,my_decorator是一个装饰器函数,接受say_hellp作为参数,然后返回wrapper函数。

def my_decorator(func): def wrapper(): print("函数执行前") func() print("函数执行后") return wrapper @my_decorator def say_hello(): print("Hello!") say_hello()

输出结果:

函数执行前 Hello! 函数执行后

类装饰器

类装饰器是一种用于动态修改类行为的装饰器,他接收一个类作为参数,并返回一个新的类或修改后的类。

类装饰器应用:

  • 添加/修改类的方法或属性
  • 拦截实例化过程
  • 实现单例模式、日志记录、权限检查等功能

常见形式

函数形式的类装饰器(接收类作为参数、返回新类)

类形式的类装饰器(实现_call_方法,使其可调用)

内置装饰器

  • @staticmethod: 将方法定义为静态方法,不需要实例化类即可调用。
  • @classmethod: 将方法定义为类方法,第一个参数是类本身(通常命名为cls)。
  • @property: 将方法转换为属性,使其可以像属性一样访问。

在使用时也可以将多个装饰器堆叠在一起,它们会按照从下到上的顺序依次应用。

数据结构

列表

在python中可以使用列表来实现栈的功能,栈——后进先出的数据结构,即最后添加的元素最先被移除。列表的append()可以把一个元素添加到栈顶、pop()方法可以把一个元素从栈顶释放出来。

栈操作

  • 压入 Push:将一个元素添加到栈顶
  • 弹出 Pop:移除并返回栈顶元素
  • 查看栈顶元素 Peek/Top:返回栈顶元素而不移除它
  • 检查是否为空 IsEmpty:检查栈是否为空
  • 获取栈的大小 Size:获取栈中元素的数量

1、创建空栈

s = []

2、压入

s = [] s.append(1) s.append(2) s.append(3) print(s) #输出结果:[1, 2, 3]

3、弹出

s = [] s.append(1) s.append(2) s.append(3) s2 = s.pop() print(s2) print(s) #输出结果:3 [1, 2]

4、查看栈顶元素

s = [] s.append(1) s.append(2) s.append(3) s3 = s[-1] print(s3) #输出结果:3

5、检查是否为空

s = [] s.append(1) s.append(2) s.append(3) is_empty = len(s) == 0 print(is_empty) #输出结果:False

6、获取栈大小

s = [] s.append(1) s.append(2) s.append(3) size = len(s) print(size) #输出结果:3

队列

队列是一种先进先出的数据结构,最早添加的元素最先被移除。在python中可以使用collections.deque实现队列。使用列表也可以实现队列,但使用collections.deque更高效简洁。

from collections import deque # 创建一个空队列 queue = deque() # 向队尾添加元素 queue.append('a') queue.append('b') queue.append('c') print("队列状态:", queue) # 输出: 队列状态: deque(['a', 'b', 'c'])

遍历技巧

在字典遍历中,关键字和对应值可以使用items()方法同时解读出来。

k = {'liming':98,'jenny':100} for k,v in k.items(): print(k,v) #输出结果 #liming 98 #jenny 100

在序列遍历中,索引位置和对应值可以使用enumerate()函数同时得到。

a = ['liming','jenny','danny'] for i,v in enumerate(a): print(i,v) #输出结果 #0 liming #1 jenny #2 danny

反向遍历一个序列:先指定序列,然后调用reversed()函数。

按顺序遍历一个序列:使用sorted()函数返回一个已排序的序列,并不修改原值。

http://www.cnnetsun.cn/news/1777783.html

相关文章:

  • AI 正在重塑我们的思维方式
  • Holistic Tracking应用案例:在线健身指导、动作规范分析一键搞定
  • DownKyi免费终极指南:三步解锁B站8K视频下载的完整解决方案
  • wxappUnpacker技术解析与实战指南:小程序逆向工程的开源工具实践
  • 如何保障工程信号传输不受信号干扰
  • 3步快速上手:Degrees of Lewdity中文汉化终极指南
  • 墨语灵犀入门教程:Python爬虫数据清洗与信息提取实战
  • Guohua Diffusion场景应用:用AI为文创产品设计国风插画,实战案例分享
  • 美国飞船 1.5 亿的太空厕所已瘫痪。NASA:小 bug。网友:和航母厕所同一家供应商么
  • 俄罗斯电商综合知识 | 新手入行,Captain AI是你的专属百科
  • 零基础5分钟上手:RexUniNLU零样本NLP实战,无需标注数据
  • 看看MusePublic能做什么?高清、细腻光影的艺术人像生成案例分享
  • AcousticSense AI效果实测:上传歌曲,AI准确识别流行、摇滚、古典等风格
  • EPLAN项目检查的5个隐藏技巧:让自动检查效率提升300%
  • NVIDIA Profile Inspector完整指南:释放显卡隐藏性能的终极教程
  • 【PSO三维路径规划】基于matlab Levy飞行改进粒子群算法LevyPSO复杂三维山地环境无人机避障路径规划研究附Matlab代码
  • 实战篇(二)电商用户画像
  • smart-doc实战:一键生成Postman集合与对接Torna文档平台完整流程
  • Pixel Script Temple 命令行工具开发:快速构建高效CLI应用
  • Phi-4-Reasoning-VisionGPU利用率:双卡4090满载率超92%的调度策略揭秘
  • RVC新手必看:3步完成声纹采集→数据处理→模型训练
  • C语言学习第一天
  • 电脑蓝屏出现 INACCESSIBLE BOOT DEVICE 解决方法
  • 使用Alpine配置WSL ssh门户还
  • 我为什么说光纤KVM不会被IP KVM取代?
  • 浙商银行笔试题库小程序练习2026新版题库
  • 3分钟实现高效定位:电话号码地理位置查询实用指南
  • 5个真实案例解析:Prompt工程+RAG+微调如何提升企业AI应用效果
  • 从阻塞到DMA:STM32F103C8T6四种串口接收方式性能实测与选型指南(附CubeMX配置)
  • CLIP-GmP-ViT-L-14图文匹配工具入门实战:5分钟完成本地图文语义对齐验证