掌握这些 Python 函数,让你的代码更简洁优雅

在 Python 编程世界里,代码的简洁性与可读性至关重要。简洁优雅的代码不仅便于自己后期维护,也能让其他开发者快速理解逻辑。而 Python 丰富的内置函数和一些实用的第三方库函数,就是实现这一目标的有力武器。接下来,就为大家介绍几个能让代码“脱胎换骨”的函数,助力写出简洁又优雅的代码。

 

 

一、 map  函数:批量操作元素

 

 map  函数接收两个参数,一个是函数,一个是可迭代对象(比如列表、元组等 ),它会将传入的函数依次作用到可迭代对象的每个元素上,返回一个新的迭代器。

 

场景示例:列表元素平方

 

如果要对一个列表  nums = [1, 2, 3, 4]  中的每个元素求平方,常规的  for  循环写法是这样:

 

nums = [1, 2, 3, 4]

result = []

for num in nums:

    result.append(num ** 2)

print(result)  

 

 

用  map  函数则简洁很多:

 

nums = [1, 2, 3, 4]

result = map(lambda x: x ** 2, nums)

# 转为列表查看结果,实际使用中若后续迭代可直接用迭代器

print(list(result))  

 

 

这里利用  lambda  匿名函数配合  map ,一行代码就完成了对列表所有元素的平方操作,省去了手动初始化空列表、写循环体的步骤,代码更紧凑。

 

二、 filter  函数:精准筛选元素

 

 filter  函数同样接收函数和可迭代对象作为参数,传入的函数需返回布尔值,它会筛选出可迭代对象中使函数返回  True  的元素,返回一个迭代器。

 

场景示例:筛选列表中的偶数

 

对于列表  nums = [1, 2, 3, 4, 5, 6] ,要筛选出其中的偶数,常规循环:

 

nums = [1, 2, 3, 4, 5, 6]

result = []

for num in nums:

    if num % 2 == 0:

        result.append(num)

print(result)  

 

 

用  filter  函数:

 

nums = [1, 2, 3, 4, 5, 6]

result = filter(lambda x: x % 2 == 0, nums)

print(list(result))  

 

 

借助  filter  ,把筛选逻辑(判断是否为偶数 )提炼成函数(这里用  lambda  ),直接筛选出符合条件的元素,代码逻辑清晰又简洁。

 

三、 zip  函数:高效聚合多个可迭代对象

 

 zip  函数能将多个可迭代对象中对应位置的元素打包成元组,返回一个迭代器。当你需要同时遍历多个可迭代对象,取出对应位置元素进行操作时,它非常好用。

 

场景示例:合并两个列表对应元素

 

有两个列表  names = ["Alice", "Bob"] , ages = [20, 25] ,要将姓名和年龄一一对应合并,常规思路可能用索引遍历:

 

names = ["Alice", "Bob"]

ages = [20, 25]

result = []

for i in range(len(names)):

    result.append((names[i], ages[i]))

print(result)  

 

 

用  zip  函数:

 

names = ["Alice", "Bob"]

ages = [20, 25]

result = zip(names, ages)

print(list(result))  

 

 

 zip  自动帮我们把对应位置元素配对,代码简洁直观,尤其当可迭代对象数量更多时,优势更明显,比如三个列表  a = [1,2] ,  b = [3,4] ,  c = [5,6]  , zip(a,b,c)  能轻松打包成  [(1,3,5),(2,4,6)]  这样的形式。

 

四、 enumerate  函数:遍历带索引

 

在遍历可迭代对象时,有时需要同时获取元素的索引和元素本身。 enumerate  函数就可以在遍历过程中,为每个元素配上其索引,返回一个枚举对象(迭代器 )。

 

场景示例:遍历列表并获取索引

 

对于列表  fruits = ["apple", "banana", "orange"] ,要打印出“索引:元素”的形式,常规做法:

 

fruits = ["apple", "banana", "orange"]

index = 0

for fruit in fruits:

    print(f"{index}: {fruit}")

    index += 1

 

 

用  enumerate  函数:

 

fruits = ["apple", "banana", "orange"]

for index, fruit in enumerate(fruits):

    print(f"{index}: {fruit}")

 

 

 enumerate  自动处理了索引的递增,代码更简洁,也避免了手动管理索引变量可能出现的错误,让遍历带索引的场景变得轻松。

 

五、 collections.defaultdict :便捷处理字典默认值

 

在使用普通字典  dict  时,如果访问不存在的键,会抛出  KeyError  异常。而  collections  模块里的  defaultdict  ,可以指定一个默认工厂函数,当访问不存在的键时,会自动用默认工厂函数生成对应的值。

 

场景示例:统计列表中各元素出现次数(常规字典对比 )

 

常规字典统计列表  words = ["apple", "banana", "apple"]  中单词出现次数:

 

words = ["apple", "banana", "apple"]

count_dict = {}

for word in words:

    if word in count_dict:

        count_dict[word] += 1

    else:

        count_dict[word] = 1

print(count_dict)  

 

 

用  defaultdict :

 

from collections import defaultdict

words = ["apple", "banana", "apple"]

count_dict = defaultdict(int) # int 作为默认工厂函数,调用 int() 得到 0

for word in words:

    count_dict[word] += 1

print(dict(count_dict))  

 

 

 defaultdict  帮我们省去了判断键是否存在的步骤,直接对键进行操作即可,在处理一些需要默认值的字典场景时,让代码简洁又高效。

 

六、 functools.lru_cache :缓存优化递归或重复计算

 

对于一些递归函数或者会重复计算相同参数结果的函数, functools  模块里的  lru_cache  装饰器可以缓存函数的调用结果,当再次以相同参数调用函数时,直接返回缓存的结果,避免重复计算,提升效率,同时也能让代码更简洁(无需手动实现缓存逻辑 )。

 

场景示例:计算斐波那契数列(递归优化 )

 

常规递归计算斐波那契数列(存在大量重复计算 ):

 

def fibonacci(n):

    if n <= 1:

        return n

    return fibonacci(n - 1) + fibonacci(n - 2)

# 计算 fibonacci(30) 时会有很多重复计算

print(fibonacci(30))  

 

 

用  lru_cache  装饰器优化:

 

from functools import lru_cache

 

@lru_cache(maxsize=None) # maxsize=None 表示缓存无限大

def fibonacci(n):

    if n <= 1:

        return n

    return fibonacci(n - 1) + fibonacci(n - 2)

 

print(fibonacci(30))  

 

 

加上  lru_cache  后,函数自动缓存了计算结果,后续相同参数调用直接取缓存,大大提升了递归效率,代码上也只是添加一个装饰器,简洁又实用。

 

七、这些 Python 函数(包括内置函数和部分库函数 ),从数据处理的批量操作、筛选、聚合,到遍历优化、字典便捷处理,再到函数计算优化,覆盖了多种常见编程场景。合理运用它们,能让代码摆脱繁琐的循环、条件判断等冗余结构,变得更加简洁优雅,同时也能提升代码的执行效率和可读性。当然,Python 中还有很多其他好用的函数和特性,大家在日常编程中可以不断探索挖掘,让自己的代码越来越“Pythonic” ,写出更优质的程序。

 

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

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

相关文章

简说ping、telnet、netcat

简说 ping 和 telnet 命令的作用、用法和区别&#xff0c;方便理解它们在网络诊断中的用途。 &#x1f310; ping 命令 ✅ 作用&#xff1a; ping 用于检测网络连通性。它通过向目标主机发送 ICMP Echo 请求 并等待回应&#xff0c;从而判断目标主机是否可达&#xff0c;并测…

基于STM32的超声波模拟雷达设计

一、雷达概述 雷达&#xff08;Radio Detection and Ranging&#xff0c;无线电探测与测距&#xff09;是一种利用电磁波探测目标位置、速度等信息的主动式传感器系统。其基本原理是发射电磁波并接收目标反射的回波&#xff0c;通过分析回波的时间差、频率变化等参数&#xff0…

飞书多维表格利用 Amazon Bedrock AI 能力赋能业务

背景 飞书多维表格是一款功能强大的在线数据管理与协作工具。它打破传统表格局限&#xff0c;将电子表格与数据库特性融合&#xff0c;支持看板、甘特图、表单等多种视图自由切换&#xff0c;可根据项目进度、任务管理等不同场景灵活展示数据。其丰富的字段类型能精准适配各类…

表格对比工具推荐,快速比对Excel文件

软件介绍 今天为大家推荐一款专为Excel用户设计的表格比较工具&#xff0c;简单易用&#xff0c;零基础也能快速掌握。 轻量高效的办公助手 Excel比较工具体积仅为11MB&#xff0c;占用空间小&#xff0c;运行流畅&#xff0c;适合各类电脑配置使用。 简洁明了的操作界面 软…

深入探究其内存开销与JVM布局——Java Record

Java 14引入的Record类型如同一股清流&#xff0c;旨在简化不可变数据载体的定义。它的核心承诺是&#xff1a;​​透明的数据建模​​和​​简洁的语法​​。自动生成的equals(), hashCode(), toString()以及构造器极大地提升了开发效率。 当我们看到这样的代码&#xff1a; …

Vue 3 九宫格抽奖系统,采用优雅的 UI 设计和流畅的动画效果

九宫格抽奖 预览地址 项目简介 这是一个基于 Vue 3 开发的现代化九宫格抽奖系统&#xff0c;采用优雅的 UI 设计和流畅的动画效果&#xff0c;为用户提供极致的抽奖体验。系统支持多种奖品配置&#xff0c;实时抽奖记录展示&#xff0c;以及完整的活动说明功能。 核心功能 …

无缝对接大疆算力平台:基于Coovally的无人机AI模型端到端优化方案

【导读】 随着无人机应用场景的快速拓展&#xff0c;企业对于定制化AI解决方案的需求日益迫切。大疆算力开放平台为开发者提供了专业的模型量化与部署环境&#xff0c;帮助开发者将训练好的AI模型高效部署至大疆无人机平台。 然而&#xff0c;要实现完整的AI开发闭环&#xf…

ubuntu下载CUDA cuDNN

nivida-smi查看显卡驱动版本 &#xff08;一&#xff09;安装CUDA cuda官网 cuda官网 下载对应版本的cuda 这个官网真不错啊&#xff0c;下面附上了指令 wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2404/x86_64/cuda-ubuntu2404.pin sudo mv c…

FreeRTOS定时器

目录 1.特性2.运行环境2.1 守护任务2.2 回调函数2.3 内部源码 3.和Linux对比4.ID5.数据传输6.操作函数6.1 创建6.2 删除6.3 启动6.4 停止6.5 复位&#xff08;重置&#xff09;6.6 修改周期6.7 注意事项 7.示例&#xff1a;一般使用8.示例&#xff1a;定时器防抖 1.特性 定时器…

JavaScript中的迭代器模式:优雅遍历数据的“设计之道”

JavaScript中的迭代器模式&#xff1a;优雅遍历数据的“设计之道” 一、什么是迭代器模式&#xff1f; 在编程世界中&#xff0c;迭代器模式&#xff08;Iterator Pattern&#xff09;是一种经典的设计模式&#xff0c;它的核心思想是&#xff1a;为集合对象提供一种统一的访…

Debian/Ubuntu systemd coredump调试程序Crash

程序是通过systemd监管&#xff0c;当程序出现crash的时候&#xff0c;需要保存crash的日志&#xff0c;也就是coredump日志&#xff0c;按照一般做法设置coredump。而在安装有systemd服务的系统中一般都有systemd-coredump服务。 systemd-coredump 是 systemd 子系统中的一个工…

【图片转 3D 模型】北大·字节跳动·CMU携手——单图15 秒生成结构化3D模型!

​​引言&#xff1a;单图生成结构化 3 D 模型的技术突破​ ​ PartCrafter 由北京大学、字节跳动与卡耐基梅隆大学联合研发&#xff0c;是全球首个​​端到端生成结构化 3 D 网格​​的模型。它仅需单张 RGB 图像&#xff0c;即可在 34 秒内生成带语义分解的 3 D 部件&#xf…

零基础RT-thread第二节:按键控制

我这里依然使用的是野火开发板&#xff0c;F767芯片。 这一节写一下按键控制LED亮灭。 这是按键以及LED的原理图。 按键对应的引脚不按下时是低电平&#xff0c;按下后是高电平。 LED是在低电平点亮。 接下来是key.c: /** Copyright (c) 2006-2021, RT-Thread Development T…

《Gulp与SCSS:解构前端样式开发的底层逻辑与实战智慧》

探寻Gulp与SCSS协作的底层逻辑 Gulp&#xff0c;作为任务自动化的佼佼者&#xff0c;其核心价值在于将一系列复杂的任务&#xff0c;如文件的编译、合并、压缩等&#xff0c;以一种流畅且高效的方式串联起来&#xff0c;形成一个自动化的工作流。它基于流&#xff08;stream&a…

OpenCV CUDA模块图像变形------对图像进行GPU加速的透视变换函数warpPerspective()

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 该函数用于对图像进行 GPU 加速的透视变换&#xff08;Perspective Transformation&#xff09;&#xff0c;是 cv::warpPerspective 的 CUDA 版…

吴恩达机器学习笔记(2)—单变量线性回归

目录 一、模型表示 二、代价函数 三、代价函数的直观理解&#xff08;1&#xff09; 四、代价函数的直观理解&#xff08;2&#xff09; 五、梯度下降 六、梯度下降的直观理解 七、线性回归的梯度下降 在本篇内容中&#xff0c;我们将介绍第一个机器学习算法——线性回归…

最新华为 HCIP-Datacom(H12-821)

最新 HCIP-Datacom&#xff08;H12-821&#xff09;&#xff0c;完整题库请上方访问&#xff0c;更新完毕。 在OSPF网络中&#xff0c;NSSA区域与STUB区域都是为了减少LSA数量&#xff0c;两者最主要的区别在于&#xff0c;NSSA区域可以引入外部路由&#xff0c;并同时接收OSPF…

vba学习系列(11)--批退率通过率等数据分析

系列文章目录 文章目录 系列文章目录前言一、外观报表1.产能2.固定伤排查3.镜片不良TOP4.镜片公式计算5.镜片良率计算6.镜片批退率7.镜筒不良TOP8.镜筒公式计算9.镜筒良率计算10.镜筒批退率 二、反射率报表1.机台通过率2.镜片通过率圈数分析3.镜片通过率罩次分析4.镜筒通过率圈…

成功在 Conda Python 2.7 环境中安装 Clipper(eCLIP peak caller)

&#x1f52c; 成功在 Conda Python 2.7 环境中安装 Clipper&#xff08;eCLIP peak caller&#xff09; 本文记录了如何在无 root 权限下使用 Conda 环境&#xff0c;解决依赖、构建扩展模块并成功安装运行 clipper 的详细流程。适用于再现 eCLIP 分析流程时遇到 clipper 安装…

通过 VS Code 连接 GitLab 并上传项目

通过 VS Code 连接 GitLab 并上传项目&#xff0c;请按照以下步骤操作&#xff1a; 1. 安装必要工具 确保已安装 Git 并配置用户名和邮箱&#xff1a; git config --global user.name "你的用户名" git config --global user.email "你的邮箱" 在 VS Cod…