惯用Python的5个技巧(循环)

2024-04-16 16:28
文章标签 python 技巧 循环 惯用

本文主要是介绍惯用Python的5个技巧(循环),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在这篇文章中,你将看到5种方法可以使你的python循环更习惯,运行得更快,内存效率更高。

img

在我看来,Python是计算机科学中最简单、最通用的语言之一。如果你正确地编写python代码,很难区分python代码和伪代码。但有时,在编写最漂亮的python代码的过程中,大多数开发人员会忘记一件事:代码的执行速度。

您可以编写可读性非常强的代码,而外行可能会将其混淆为语法技能较差的人所写的英语,但它是可以理解的。但该代码需要超过300毫秒才能运行。这可能不会造成太大的延迟,但在编程领域,这是一个严重的问题。

另一方面,可以用不同的习惯用法编写相同的代码,运行所需时间少于10毫秒。但是,即使是专业的python开发人员也很难理解它。

因此,对于开发人员来说,在这两个极端之间取得平衡是非常重要的。这些类型的代码在业界被称为惯用代码。

根据定义,惯用代码是一种用您的语言的通用方式执行通用任务的代码。换句话说,惯用代码是任何易于阅读,同时又非常高效的代码。

我在twitter上经常关注Raymond Hettinger (@raymondh),他是Python社区的核心开发人员之一,他为Python存储库贡献了大量代码,使Python语言更加习惯化。

在本博客中,我将介绍一些帮助您改进python代码的技术。开始:

a. range()

让我们从最明显的开始,假设你需要从2迭代到10。所以如果你是一个绝对的初学者,你可能会写这样的东西:

for i in [2,3,4,5,6,7,8,9,10]:print(i)

这样的方法是可行的,也是可以理解的,它不是一个可扩展的方法。如果你想循环2到200万呢。

在这种情况下,可以使用range(stop)或range(start, stop, [step,])内置函数。

range函数自动为您生成列表。例如,你可以将上面的代码改写为:

for i in range(2, 11):print(i)

注意我是怎么写的,从2开始到11结束,而不是10。这是因为range函数循环到stop - 1。在距离函数中除了开始和停止还有一个参数,那就是步长。步长决定范围必须跳过多少个数字。

假设您需要打印从2到10的所有偶数,在这种情况下,skip参数将为2。缺省值是1。

for i in range(2,11,2):print(i)# OUTPUT: 2 4 6 8 10

现在假设您需要遍历一个列表。有了range()的知识,你可以这样做:

cloths = ['shirt', 'hat', 'socks', 'shorts']for i in range(len(cloths))print(cloths[i])

但在python中,有更好的方法:

cloths = ['shirt', 'hat', 'socks', 'shorts']for cloth in clothsprint(cloth)

b. zip()

假设你有两个不同尺寸的列表,颜色和布料,你想要配对它们,直到较小的列表结束。在这种情况下,你可以写这样的代码:

colours = ['pink', 'red', 'green']
cloths = ['shirt', 'hat', 'socks', 'shorts']n = min(len(colours), len(cloths))
for i in range(n):print(colours[i], cloths[i])# OUTPUT
# pink shirt
# red hat
# green socks

这很好,但你也可以使用内置函数zip(*iterables)。这个函数最好的一点是,你可以传递任意数量的列表,而不仅仅是两个。让我重写上面的代码,然后向您解释zip是如何工作的。

colours = ['pink', 'red', 'green']
cloths = ['shirt', 'hat', 'socks', 'shorts']for colour, cloth in zip(colours, cloths):print(colour, cloth)# OUTPUT
# pink shirt
# red hat
# green socks

您可能已经猜到,zip接受任意数量的列表并返回包含每个列表中的一个元素的另一个列表。如您所见,两个版本产生相同的输出,但第二个版本看起来更干净。

c. reversed()

如果你想反向循环一个列表,传统的方法是这样的。

cloths = ['shirt', 'hat', 'socks', 'shorts']for i in range(len(cloths)-1, -1, -1):print(cloths[i])# Output
# -------
# shorts
# socks
# hat
# shirt

但是在Python中,您可以使用名为reversed()的内置函数。看看这个例子:

cloths = ['shirt', 'hat', 'socks', 'shorts']for cloth in reversed(cloths):print(cloth)# Output
# -------
# shorts
# socks
# hat
# shirt

第二个比第一个更干净更快。

d. enumerate()

您希望循环通过一个列表和索引。这在传统编程中非常直接:

cloths = ['shirt', 'hat', 'socks', 'shorts']for i in range(len(cloths)):print(i, cloths[i])# Output
# -------
# 0 shorts
# 1 socks
# 2 hat
# 3 shirt

但在python中有一种更干净、更有效的方法:

cloths = ['shirt', 'hat', 'socks', 'shorts']for i, cloth in enumerate(cloths):print(i, cloth)# OUTPUT
# -------
# 0 shorts
# 1 socks
# 2 hat
# 3 shirt

e. sorted()

您需要按排序顺序遍历列表,而不是运行排序算法,您可以使用sorted()内置方法。

-in method.

nums = [2,3,1,5,2]for i in sorted(nums):print(i)# OUTPUT
# ------
# 1
# 2
# 2
# 3
# 5

python排序函数使用Tim Sort,其平均复杂度为n*log(n)

对于反向排序,可以使用sorted属性(nums, reverse=True)

你想对字符串列表排序。

cloths = ['shirt', 'hat', 'socks', 'shorts']for cloth in sorted(cloths):print(cloth)# OUTPUT
# ------
# hat
# shirt
# shorts
# socks

它会根据字母排序,但如果你想根据字符串的长度排序,你可以用key attribute。例如:

cloths = ['shirt', 'hat', 'socks', 'shorts']for cloth in sorted(cloths, key=len):print(cloth)# OUTPUT
# ------
# hat
# shirt
# socks
# shorts

以上就是5种可以让你的python代码更习惯的技巧。

图片

关于Python学习指南

学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后给大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!

包括:Python激活码+安装包、Python web开发,Python爬虫,Python数据分析,人工智能、自动化办公等学习教程。带你从零基础系统性的学好Python!

👉Python所有方向的学习路线👈

Python所有方向路线就是把Python常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。(全套教程文末领取)

在这里插入图片描述

👉Python学习视频600合集👈

观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。

在这里插入图片描述

温馨提示:篇幅有限,已打包文件夹,获取方式在:文末

👉Python70个实战练手案例&源码👈

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

在这里插入图片描述

👉Python大厂面试资料👈

我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

在这里插入图片描述

在这里插入图片描述

👉Python副业兼职路线&方法👈

学好 Python 不论是就业还是做副业赚钱都不错,但要学会兼职接单还是要有一个学习规划。

在这里插入图片描述

👉 这份完整版的Python全套学习资料已经上传,朋友们如果需要可以扫描下方CSDN官方认证二维码或者点击链接免费领取保证100%免费

这篇关于惯用Python的5个技巧(循环)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/909308

相关文章

Python的Darts库实现时间序列预测

《Python的Darts库实现时间序列预测》Darts一个集统计、机器学习与深度学习模型于一体的Python时间序列预测库,本文主要介绍了Python的Darts库实现时间序列预测,感兴趣的可以了解... 目录目录一、什么是 Darts?二、安装与基本配置安装 Darts导入基础模块三、时间序列数据结构与

Python正则表达式匹配和替换的操作指南

《Python正则表达式匹配和替换的操作指南》正则表达式是处理文本的强大工具,Python通过re模块提供了完整的正则表达式功能,本文将通过代码示例详细介绍Python中的正则匹配和替换操作,需要的朋... 目录基础语法导入re模块基本元字符常用匹配方法1. re.match() - 从字符串开头匹配2.

Python使用FastAPI实现大文件分片上传与断点续传功能

《Python使用FastAPI实现大文件分片上传与断点续传功能》大文件直传常遇到超时、网络抖动失败、失败后只能重传的问题,分片上传+断点续传可以把大文件拆成若干小块逐个上传,并在中断后从已完成分片继... 目录一、接口设计二、服务端实现(FastAPI)2.1 运行环境2.2 目录结构建议2.3 serv

通过Docker容器部署Python环境的全流程

《通过Docker容器部署Python环境的全流程》在现代化开发流程中,Docker因其轻量化、环境隔离和跨平台一致性的特性,已成为部署Python应用的标准工具,本文将详细演示如何通过Docker容... 目录引言一、docker与python的协同优势二、核心步骤详解三、进阶配置技巧四、生产环境最佳实践

Python一次性将指定版本所有包上传PyPI镜像解决方案

《Python一次性将指定版本所有包上传PyPI镜像解决方案》本文主要介绍了一个安全、完整、可离线部署的解决方案,用于一次性准备指定Python版本的所有包,然后导出到内网环境,感兴趣的小伙伴可以跟随... 目录为什么需要这个方案完整解决方案1. 项目目录结构2. 创建智能下载脚本3. 创建包清单生成脚本4

Python实现Excel批量样式修改器(附完整代码)

《Python实现Excel批量样式修改器(附完整代码)》这篇文章主要为大家详细介绍了如何使用Python实现一个Excel批量样式修改器,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一... 目录前言功能特性核心功能界面特性系统要求安装说明使用指南基本操作流程高级功能技术实现核心技术栈关键函

python获取指定名字的程序的文件路径的两种方法

《python获取指定名字的程序的文件路径的两种方法》本文主要介绍了python获取指定名字的程序的文件路径的两种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要... 最近在做项目,需要用到给定一个程序名字就可以自动获取到这个程序在Windows系统下的绝对路径,以下

使用Python批量将.ncm格式的音频文件转换为.mp3格式的实战详解

《使用Python批量将.ncm格式的音频文件转换为.mp3格式的实战详解》本文详细介绍了如何使用Python通过ncmdump工具批量将.ncm音频转换为.mp3的步骤,包括安装、配置ffmpeg环... 目录1. 前言2. 安装 ncmdump3. 实现 .ncm 转 .mp34. 执行过程5. 执行结

Python实现批量CSV转Excel的高性能处理方案

《Python实现批量CSV转Excel的高性能处理方案》在日常办公中,我们经常需要将CSV格式的数据转换为Excel文件,本文将介绍一个基于Python的高性能解决方案,感兴趣的小伙伴可以跟随小编一... 目录一、场景需求二、技术方案三、核心代码四、批量处理方案五、性能优化六、使用示例完整代码七、小结一、

Python中 try / except / else / finally 异常处理方法详解

《Python中try/except/else/finally异常处理方法详解》:本文主要介绍Python中try/except/else/finally异常处理方法的相关资料,涵... 目录1. 基本结构2. 各部分的作用tryexceptelsefinally3. 执行流程总结4. 常见用法(1)多个e