5个实用的Python编程小技巧

大家好,Python是一门很棒的编程语言,具有简洁和抽象为特点,本文将介绍五个实用的Python编程技巧。

1. 列表生成式

通过使用列表生成式,可以用一行简洁的代码生成列表、字典、集合,不需要编写多行代码。列表生成式最常用于列表,但其结构与其他数据结构是相同的。

例如,下面这段代码是用于获取数字的平方:

output = []
for i in range(10):output.append(i**2)
print(output)
# [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

可以使用列表生成式缩短代码:

output = [i**2 for i in range(10)]
print(output)
# [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

列表生成式的语法非常简单,可以通过以下方式解释:使用两个方括号表示列表在此放置逻辑。方括号内的部分与常规的for循环几乎相同。右侧是常规“for循环”的语法。在左侧,可以访问“for循环”的元素,并在那里进行计算。

# [<Left hand side: calculations of i> for i in range(10)]
CompressedList = [i+2*i for i in range(10)]

列表生成式也适用于字典、集合和生成器,可点击如下链接查看示例。

【字典、集合和生成器】:https://book.pythontips.com/en/latest/comprehensions.html

2. Lambda函数

Lambda函数是Python中的单行代码函数。它们的功能与普通函数相同,但更简短、更易于使用。然而,与普通函数不同的是,它们是匿名的。这意味着该函数没有与之关联的标识符。这意味着如果不将lambda函数存储到变量中,就永远无法再次访问它。这非常适合一次性使用。

例如,下面的这段代码是根据第二个元素而不是第一个元素,对包含2个元素组成的元组列表进行排序:

l = [(1, 2), (8, 0), (2, 1)]
def secondElement(x):return x[1]
l.sort(key=secondElement)
print(l)
# [(8, 0), (2, 1), (1, 2)]

可以使用匿名函数,将代码缩短为如下格式:

l = [(1, 2), (8, 0), (2, 1)]
l.sort(key=lambda x : x[1])
print(l)
# [(8, 0), (2, 1), (1, 2)]

用户很可能永远都不需要再次使用函数secondElement,这就是lambda函数为什么如此强大的一个很好的例子。

Lambda函数的语法很简单。在左侧使用lambda,然后在空格后写出所有需要的参数,参数之间用逗号分隔。之后,使用:分隔参数和计算值,计算得到的值从lambda函数中返回。以下是另一个示例:

# lambdaFunction = lambda <arguments here> : <operation here>
add = lambda x,y : x+y
print(add(2,3))
# 5

3. 集合collections

集合是Python中的内置数据结构模块。与Python的默认数据类型相比,这些集合提供了更多的可扩展性和便利性。创建的类型有很多种,下面列出了最重要的几种。

# 如何导入collections
from collections import defaultdict
from collections import OrderedDict
from collections import Counter
from collections import deque
from collections import namedtuple

3.1 默认字典(Default Dictionary)

当不存在键时,会返回一个默认值而不是引发KeyError的字典,可以通过将函数或常量值传递给defaultdict构造函数来创建它。

3.2 有序字典(Ordered Dictionary)

可记录其项的插入顺序并允许基于该顺序进行迭代、删除和重新排序的字典,可以通过将键值对的可迭代对象或关键字参数传递给OrderedDict构造函数来创建它。

3.3 计数器(Counter)

用于计算序列或可迭代对象中每个元素出现次数的字典,可以通过将可迭代对象、映射或关键字参数传递给Counter构造函数来创建它,它具有对计数器执行常见操作的方法,如加法、减法、交集、并集等。

3.4 双端队列(Deque)

支持在两端添加和删除元素,时间复杂度为O(1)的双端队列,可以通过将可迭代对象传递给deque构造函数来创建它,它具有用于旋转、扩展和一次弹出多个元素的方法。

3.5 具名元组(Named Tuples)

每个元素都有名称,并且可以通过点符号或索引进行访问的元组,可以通过使用namedtuple函数定义一个命名元组类,并将类名和字段名作为参数来创建它,它具有用于创建、替换、转换和操作命名元组的方法。

4. 装饰器

装饰器是一种设计模式,它支持扩展函数的属性而无需编辑函数本身。可以编写类似下面的代码:

import time
start_time = time.time()
main()
print("--- %s seconds ---" % (time.time() - start_time))
# --- 0.764891862869 seconds ---

但是,如果想要测试其他函数的时间,就必须创建重复的代码。为了解决这个问题,可以向想要计时的函数添加一个装饰器:

from time import time def timer_func(func): # 接受函数作为参数def wrap_func(*args, **kwargs): t1 = time() # 初始时间result = func(*args, **kwargs) t2 = time() # 结束时间print(t2 - t1) # 时间差(以秒为单位)return result return wrap_func @timer_func # 我们编写的装饰器
def long_time(n): # 这个函数会花一些时间for i in range(n): for j in range(n): i*j long_time(10_000)
# 3.2696526050567627 

5. 压缩和解压缩

zip是一个可以将列表合并为元组的函数,以下是一个简单的示例,可以轻松地遍历两个不同的列表:

firstNames = ["John", "Adam", "Steve", "Alan", "Extra"]
lastNames = ["Lennon", "Smith", "Jobs", "Turing"]for first, last in zip(firstNames,lastNames):print(first, last)'''
John Lennon
Adam Smith
Steve Jobs
Alan Turing
'''

zip的长度与最短列表的长度相同,如果你有一个(包含Name, Age, Gender)列表,但只想获得Name的列表,可以按以下方式编写代码:

names = [('Joe', 12, "male"),('Earnst', 43, "male"),('Anna', 65, "female"),('Martin', 39, "male"),('Katie', 26, "female")]
name, age, gender = zip(*names)
print(name)
# ('Joe', 'Earnst', 'Anna', 'Martin', 'Katie')

综上所述是Python中的五个基本技巧,这些技巧能用尽量少的、更易理解的代码编写程序。

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

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

相关文章

和gpt聊天,学一手hdfs

我把聊天中间的主题&#xff0c;用标题标出来了&#xff0c;可以跳转直接观看&#xff0c;纯小白的求知道路。 目录 文章目录 目录[toc] 计划学习**主题**: 1.1 HDFS概述**问题**: 他和mysql有什么区别**主题**: 1.1 HDFS概述HDFS 的设计和工作原理选择最佳的 DataNode策略配置…

基于单片机的烟雾检测报警装置(论文+源码)

1.系统设计 &#xff08;1&#xff09;利用传感器实现环境中温度、烟雾浓度的实时检测&#xff1b; &#xff08;2&#xff09;系统检测的各项数据信息通过液晶模块进行显示&#xff0c;提高设计可视化&#xff1b; &#xff08;3&#xff09;系统可以根据实际情况利用按键模…

Mysql单表查询练习

一、单表查询 素材&#xff1a; 表名&#xff1a;worker-- 表中字段均为中文&#xff0c;比如 部门号 工资 职工号 参加工作 等 CREATE TABLE worker (部门号 int(11) NOT NULL,职工号 int(11) NOT NULL,工作时间 date NOT NULL,工资 float(8,2) NOT NULL,政治面貌 varchar(10…

双十二有什么好物是值得推荐?智能家居好物推荐

都知十一月份跟十二月份都有两个大促的时间&#xff0c;那就是双十一跟双十二&#xff0c;距离双十一过去已经半个月了&#xff0c;是不是还有很多朋友在双十一的时候也没有买尽兴&#xff0c;别慌&#xff01;错过了双十一咱还有双十二&#xff0c;双十二的优惠力度也不会低于…

短视频账号矩阵系统源码/saas独立源头技术开发

一、批量剪辑&#xff08;采用php语言&#xff0c;数学建模&#xff09; 短视频合成批量剪辑的算法主要有以下几种&#xff1a; 1. 帧间插值算法&#xff1a;通过对多个视频的帧进行插帧处理&#xff0c;从而合成一段平滑的短视频。 2. 特征提取算法&#xff1a;提取多个视频中…

Python编程入门——透析八大核心知识点快速掌握Python编程

前言 Python是一种相对容易学习和使用的编程语言。对于有其他编程经验&#xff08;比如C&#xff09;的开发者来说&#xff0c;学习Python可能会更加轻松和快捷。Python语言特点&#xff1a; 简洁的语法&#xff1a; Python的语法相对简单且易读易写。与C相比&#xff0c;Pyth…

SC3671升降压应用 10-30V输入区间 输出 12V 2A 恒压输出

SC3671升降压应用 10-30V输入区间 输出 12V 2A 恒压输出 10V-24V输入 升降压输出12V3A 外置MOS 大电流

【开发实践】使用POI实现导出带有复杂表头的的excel文件

一、需求分析 公司业务部门需要&#xff0c;根据一些数据&#xff0c;加上表头&#xff0c;导出需要的excel表格。效果如下&#xff1a; 二、代码实现 【依赖准备】 <!-- POI --><dependency><groupId>org.apache.poi</groupId><artifactId>po…

修改Linux系统的网络参数

修改Linux系统的网络参数 接收缓冲区是用来存储从网络接口接收到的数据的一块内存区域。通过增大接收缓冲区的大小&#xff0c;可以提高网络传输的性能&#xff0c;特别是在处理大量数据或高负载情况下。 sudo sysctl -w net.core.rmem_max2097152 sudo sysctl -w net.core.r…

【esp32】可变时间的定时器中断的开启和关闭

前言 回忆若能下酒&#xff0c;往事便可作一场宿醉。醒来时&#xff0c;天依旧清亮&#xff0c;风仍然分明&#xff0c;而光阴的两岸&#xff0c;终究无法以一苇杭之。我知你心意。无须更多言语&#xff0c;我必与你相忘于江湖&#xff0c;以沧桑为饮&#xff0c;年华果腹&…

倾斜摄影三维模型的根节点合并的轻量化技术方法分析

倾斜摄影三维模型的根节点合并的轻量化技术方法分析 倾斜摄影三维模型的根节点合并是一种轻量化技术&#xff0c;旨在减小模型数据的大小&#xff0c;提高渲染效率和加载速度。在本文中&#xff0c;我们将探讨关于倾斜摄影三维模型根节点合并的轻量化技术方法。 1、LOD&#x…

SpringBoot+网易邮箱登录注册

文章目录 SpringBoot网易邮箱登录注册pom.xmlapplication.ymlsqlUserEmail.javaUserEmailMapper.javaUserEmailMapper.xmlEmailService.javaUserEmailService.javaUserEmailServiceImpl.javaUserEmailController.javaregister1.html 编写前参考 SpringBoot网易邮箱登录注册 po…

PPSSPP (PSP游戏模拟器)最新版安装使用教程

PPSSPP优势 1、目前唯一的也是最好的psp模拟器 可运行绝大多数psp游戏且运行高速&#xff0c;即使是低配手机也能游玩经典大作。 2、支持自定义调节虚拟手柄和实体手柄连接 ppsspp模拟器支持使用虚拟手柄或者连接实体手柄游玩&#xff0c;同时还可以自定义调节按键选项。 …

启动程序触发器-项目启动建表

一、需求 在项目启动时&#xff0c;自动新建数据表 二、实现思路 创建触发类 实现SpringBoot的ApplicationRunner接口 编写建表语句常量 实现run方法&#xff0c;并在run方法中使用JDBC工具类的建表方法&#xff0c;传入建表语句常亮&#xff0c;完成建表 三、代码实现&…

牛客剑指offer刷题位运算篇

文章目录 不用加减乘除做加法题目思路代码实现 二进制中1的个数题目思路代码实现 数值的整数次方题目思路代码实现 不用加减乘除做加法 题目 设计一个函数把两个数字相加。不得使用 或者其他算术运算符。 示例: 输入: a 1, b 1 输出: 2 提示&#xff1a; a, b 均可能是负…

使用Git客户端向gitee免密推送项目代码(保姆级流程哦)

1.进入Git官网手动下载git的客户端可执行程序 一路next即可 2.找到安装路径下的3.进入git-bash 根据如下的代码一次执行只需要修改对应的username和自己再gitee中绑定的邮箱 4.分发私钥到邮箱 产生私钥的时候回车三次即可&#xff1b;查看私钥如下图及正常&#xff1b; 5.进…

文生图领域经典-ControlNet介绍

引言 2023年的计算机视觉领域顶级学术会议ICCV上&#xff0c;一篇颠覆文生图AI领域的论文《Adding Conditional Control to Text-to-Image Diffusion Models》——ControlNet 荣膺最佳论文奖(Marr奖)。 自开源以来&#xff0c;ControlNet已经在GitHub上揽获25k星。无论是对扩…

vue项目多个不同的服务器请求地址管理

vue项目多个不同的服务器请求地址管理 在vue项目开发过程中&#xff0c;获取不同的数据可能会出现需要请求多个不同服务器地址的域名&#xff0c;这个时候需要对不同域名的请求地址进行管理以及跨域的代理。 一、单服务器域名地址的跨域代理和请求配置&#xff1a; 跨域配置&…

C#:程序发布的大小控制

.net不讨喜有个大原因就是.net平台本身太大了&#xff0c;不同版本没有兼容性&#xff0c;程序依赖哪个版本用户就要安装哪个版本&#xff0c;除非你恰好用的是操作系统默认安装的版本——问题是不同版本操作系统默认安装的不一样。 所以打包程序就很头疼&#xff0c;不打包平台…

深度解读:为什么要做数据合规?如何做到数据合规?

数据资源“入表”在即&#xff0c;企业更需筑牢数据合规防线。但企业主企业购买数据、获取数据到底是否合法合规&#xff0c;入表如何防范合规风险&#xff1f;上周三&#xff0c;亿信华辰邀请到北京鑫诺律师事务所高级合伙人、管委会副主任武婕将和大家分享《数据入表法律合规…