当前位置:首页 > 科技  > 软件

五个实用的Python编程小技巧

来源: 责编: 时间:2023-10-27 09:15:36 463观看
导读简介Python是一门很棒的编程语言,具有简洁和抽象为特点。Python编程涉及许多技巧,能用尽量少的代码、更易理解的代码编写程序。本文介绍五个实用的Python编程技巧。1. 列表生成式通过使用列表生成式,可以用一行简洁的代

简介

Python是一门很棒的编程语言,具有简洁和抽象为特点。Python编程涉及许多技巧,能用尽量少的代码、更易理解的代码编写程序。本文介绍五个实用的Python编程技巧。sD228资讯网——每日最新资讯28at.com

1. 列表生成式

通过使用列表生成式,可以用一行简洁的代码生成列表、字典、集合,不需要编写多行代码。sD228资讯网——每日最新资讯28at.com

列表生成式最常用于列表,但其结构与其他数据结构是相同的。sD228资讯网——每日最新资讯28at.com

例如,下面这段代码是用于获取数字的平方:sD228资讯网——每日最新资讯28at.com

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

可以使用列表生成式缩短代码:sD228资讯网——每日最新资讯28at.com

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

列表生成式的语法非常简单,可以通过以下方式解释:sD228资讯网——每日最新资讯28at.com

使用两个方括号表示列表[在此放置逻辑]。方括号内的部分与常规的for循环几乎相同。sD228资讯网——每日最新资讯28at.com

右侧是常规“for循环”的语法。在左侧,可以访问“for循环”的元素,并在那里进行计算。sD228资讯网——每日最新资讯28at.com

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

列表生成式也适用于字典、集合和生成器,可点击如下链接查看示例。sD228资讯网——每日最新资讯28at.com

【字典、集合和生成器】:https://book.pythontips.com/en/latest/comprehensions.htmlsD228资讯网——每日最新资讯28at.com

2. Lambda函数

Lambda函数是Python中的单行代码函数。它们的功能与普通函数相同,但更简短、更易于使用。然而,与普通函数不同的是,它们是匿名的。这意味着该函数没有与之关联的标识符。sD228资讯网——每日最新资讯28at.com

这意味着如果不将lambda函数存储到变量中,就永远无法再次访问它。这非常适合一次性使用。sD228资讯网——每日最新资讯28at.com

例如,下面的这段代码是根据第二个元素而不是第一个元素,对包含2个元素组成的元组列表进行排序:sD228资讯网——每日最新资讯28at.com

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

可以使用匿名函数,将代码缩短为如下格式:sD228资讯网——每日最新资讯28at.com

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

用户很可能永远都不需要再次使用函数secondElement,这就是lambda函数为什么如此强大的一个很好的例子。sD228资讯网——每日最新资讯28at.com

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

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

3. 集合collections

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

# 如何导入collectionsfrom collections import defaultdictfrom collections import OrderedDictfrom collections import Counterfrom collections import dequefrom collections import namedtuple

3.1 默认字典(Default Dictionary)

当不存在键时,会返回一个默认值而不是引发KeyError的字典。可以通过将函数或常量值传递给defaultdict构造函数来创建它。sD228资讯网——每日最新资讯28at.com

3.2 有序字典(Ordered Dictionary)

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

3.3 计数器(Counter)

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

3.4 双端队列(Deque)

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

3.5 具名元组(Named Tuples)

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

4. 装饰器

装饰器是一种设计模式,它支持扩展函数的属性而无需编辑函数本身。这可能听起来很复杂,但在实际操作中非常简单。想象一下,你想测量函数的执行时间,可以编写类似下面的代码:sD228资讯网——每日最新资讯28at.com

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

但是,如果想要测试其他函数的时间,就必须创建重复的代码。为了解决这个问题,可以向想要计时的函数添加一个装饰器:sD228资讯网——每日最新资讯28at.com

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

现在,该装饰器也可以在其他函数中重复使用!sD228资讯网——每日最新资讯28at.com

Python还内置了装饰器,例如functools模块中的装饰器。可以在如下文章中找到其他有用的内置装饰器。sD228资讯网——每日最新资讯28at.com

《代码减半,5个绝佳的Python装饰器》sD228资讯网——每日最新资讯28at.com

5. 压缩和解压缩

zip是一个可以将列表合并为元组的函数。以下是一个简单的示例,可以轻松地遍历两个不同的列表:sD228资讯网——每日最新资讯28at.com

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

注意额外的名字是如何被省略的。zip的长度与最短列表的长度相同。sD228资讯网——每日最新资讯28at.com

如果想要获取一个元组列表中的所有首元素,zip也很有用。例如,如果你有一个(包含Name, Age, Gender)列表,但只想获得Name的列表,可以按以下方式编写代码:sD228资讯网——每日最新资讯28at.com

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中的五个基本技巧。如果想了解更多技巧,可以阅读本文最后的精彩回顾。sD228资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-15342-0.html五个实用的Python编程小技巧

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 12个程序员必知必备的Git命令

下一篇: 亚马逊云计算业务Q3营收230亿美元 营收营业利润双双创下新高

标签:
  • 热门焦点
  • 卢伟冰长文解析K60至尊版 对Redmi有着里程碑式的意义

    在今天的Redmi后性能时代战略发布会结束之后,Redmi总经理卢伟冰又带来了一篇长文,详解了为什么 Redmi 要开启后性能时代?为什么选择和 MediaTek、Pixelworks 深度合作?以及后性
  • 三言两语说透设计模式的艺术-单例模式

    写在前面单例模式是一种常用的软件设计模式,它所创建的对象只有一个实例,且该实例易于被外界访问。单例对象由于只有一个实例,所以它可以方便地被系统中的其他对象共享,从而减少
  • 共享单车的故事讲到哪了?

    来源丨海克财经与共享充电宝相差不多,共享单车已很久没有被国内热点新闻关照到了。除了一再涨价和用户直呼用不起了。近日多家媒体再发报道称,成都、天津、郑州等地多个共享单
  • 品牌洞察丨服务本地,美团直播成效几何?

    来源:17PR7月11日,美团App首页推荐位出现&ldquo;美团直播&rdquo;的固定入口。在直播聚合页面,外卖&ldquo;神枪手&rdquo;直播间、美团旅行直播间、美团买菜直播间等均已上线,同时
  • 大厂卷向扁平化

    来源:新熵作者丨南枝 编辑丨月见大厂职级不香了。俗话说,兵无常势,水无常形,互联网企业调整职级体系并不稀奇。7月13日,淘宝天猫集团启动了近年来最大的人力制度改革,目前已形成一
  • 冯提莫签约抖音公会 前“斗鱼一姐”消失在直播间

    来源:直播观察提起&ldquo;冯提莫&rdquo;这个名字,很多网友或许听过,但应该不记得她是哪位主播了。其实,作为曾经的&ldquo;斗鱼一姐&rdquo;,冯提莫在游戏直播的年代影响力不输于现
  • 造车两年股价跌六成,小米的估值逻辑变了吗?

    如果从小米官宣造车后的首个交易日起持有小米集团的股票,那么截至2023年上半年最后一个交易日,投资者将浮亏59.16%,同区间的恒生科技指数跌幅为52.78%
  • AMD的AI芯片转单给三星可能性不大 与台积电已合作至2nm制程

    据 DIGITIMES 消息,英伟达 AI GPU 出货逐季飙升,接下来 AMD MI 300 系列将在第 4 季底量产。而半导体业内人士表示,近日传出 AMD 的 AI 芯片将转单给
  • 联想的ThinkBook Plus下一版曝光,键盘旁边塞个平板

    ThinkBook Plus 是联想的一个特殊笔记本类别,它在封面放入了一块墨水屏,也给人留下了较为深刻的印象。据有人爆料,联想的下一款 ThinkBook Plus 可能更特殊,它
Top