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

Python for循环如何更加Pythonic

来源: 责编: 时间:2024-05-11 09:18:12 242观看
导读讨论了不同的Python编程策略,包括优化嵌套结构代码,列表推导式和生成器表达式的使用,map和reduce函数的应用以及高效使用多函数并在适当的地方使用内建库。为何需避免循环?面对这个问题,可能会有疑虑,为何要对自己的编程提

讨论了不同的Python编程策略,包括优化嵌套结构代码,列表推导式和生成器表达式的使用,map和reduce函数的应用以及高效使用多函数并在适当的地方使用内建库。xzP28资讯网——每日最新资讯28at.com

xzP28资讯网——每日最新资讯28at.com

为何需避免循环?

面对这个问题,可能会有疑虑,为何要对自己的编程提出挑战,尽量避免在代码中使用for循环?实际上,要避免在Python里使用for循环,并不是因为for循环差劲或低效。相反,这是一种通过探索其他结构和功能以深化对Python理解的方式,也能让代码更加简洁、易读和更"Python"。xzP28资讯网——每日最新资讯28at.com

通常,for循环用于以下场景:xzP28资讯网——每日最新资讯28at.com

  • 从序列中提取特定信息。
  • 从当前序列创建新序列。
  • 使用for循环已经成为习惯。

好消息是,Python 为这些任务提供了一系列工具,只需要改变思考方式并获得新的视角就可以解决它们。xzP28资讯网——每日最新资讯28at.com

避免编写for循环,您可以收获如下益处:xzP28资讯网——每日最新资讯28at.com

减少代码的数量:利用Python内置函数或者列表推导式,可以更简洁地执行常见的操作,通常这可以在完成相同的任务时,用更少的代码替代for循环。xzP28资讯网——每日最新资讯28at.com

增强代码的可读性:使用列表推导式或内置函数的代码,通常比使用等效的for循环的代码更容易一看就明白。这是因为这些构造抽象了循环机制,更关注正在执行的操作。xzP28资讯网——每日最新资讯28at.com

减少缩进(这在Python里尤为重要):Python高度依赖于缩进来定义代码块的结构。避免使用循环可以减少额外缩进级别的需求,使代码更简洁、更易于理解。这在Python 中特别有用,它强调可读性和简单性。xzP28资讯网——每日最新资讯28at.com

下面的例子中:xzP28资讯网——每日最新资讯28at.com

with open('example_file.txt', 'r') as file:    for line in file:        if 'keyword' in line:            try:                value = int(line.strip())                print(value)            except ValueError:                print("Conversion error occurred.")        else:            print("Keyword not found in line.")

在这个例子中,代码有许多嵌套结构,因此可读性会变得困难。这个例子展示了深度嵌套代码的运用。xzP28资讯网——每日最新资讯28at.com

在此代码片段中,通过不加选择地将控制流结构(如 with 和 try-except 块)与业务逻辑(如 for循环和 if语句)混杂在一起,产生了过多的缩进。如果能够坚持主要为控制流结构保留缩进,核心业务逻辑应该就会变得更加清晰,更易于理解。xzP28资讯网——每日最新资讯28at.com

列表推导及生成器

Python中的列表推导和生成器表达式为处理和操作诸如列表或可迭代对象的集合提供了紧凑的方式。xzP28资讯网——每日最新资讯28at.com

列表推导

列表推导是创建新列表的简洁方式。包含一个表达式,然后是一个 for 子句,接着是零个或多个for或if子句,最后得到一个新的列表。这个表达式可以是任何物件,代表可以放入列表的任何类型。最后的结果是新列表,它由后面的 for和 if 子句的上下文中进行评估后产生。它通常比通过正常的函数和循环创建列表更紧凑、更快捷。xzP28资讯网——每日最新资讯28at.com

例如,[x**2 For x in range(10)]将输出包含0到9的数字平方的列表。xzP28资讯网——每日最新资讯28at.com

生成器表达式

生成器表达式类似于列表推导,不过它们不是创建整个列表并一次性存储所有的项目,而是逐个生成项目,然后丢弃。这意味着生成器表达式的内存效率是优于相应的列表推导式的。xzP28资讯网——每日最新资讯28at.com

例如,(x**2 for x in range(10))创建一个生成器,它一次计算一个,对0至9的数字进行平方。xzP28资讯网——每日最新资讯28at.com

示例:xzP28资讯网——每日最新资讯28at.com

result = []for item in item_list:    new_item = do_something_with(item)    result.append(item)

可改写为:xzP28资讯网——每日最新资讯28at.com

result = [do_something_with(item) for item in item_list]

Map/Reduce函数

在Python中,map和reduce功能是把指定的函数应用于可迭代序列(如列表),并分别将其缩小为一个累积值。xzP28资讯网——每日最新资讯28at.com

map 函数

map函数把特定的函数适用于可迭代对象(如列表)的每一项,并返回一个结果列表。语法是map(function, iterable, ...)。当你想对集合中的每一个项目执行相同的操作而不需要编写显式循环时,此功能十分有用。xzP28资讯网——每日最新资讯28at.com

例如,.map(lambda x: x * 2, [1, 2, 3, 4])会返回[2, 4, 6, 8]xzP28资讯网——每日最新资讯28at.com

reduce 函数

reduce函数是functools模块的一部分,它重复将给定函数应用于序列元素,并以单一值形式返回它。传递给reduce的函数必须接受两个参数,这个函数从左到右地累积应用于可迭代项目,以便将可迭代项目减少为单个值。xzP28资讯网——每日最新资讯28at.com

例如,reduce(lambda x, y: x+y, [1, 2, 3, 4])会把列表中的数加在一起并得到10。xzP28资讯网——每日最新资讯28at.com

map表述变换,reduce表述累加。两者都是Python中函数式编程风格的示例,可以将函数应用于序列和其他可迭代对象。xzP28资讯网——每日最新资讯28at.com

多函数使用

上述的方法非常适合处理简单的逻辑。但对于更复杂的逻辑呢?作为程序员,我们编写函数来简化复杂的操作。同样的概念也适用于这里。如果你的代码像这样:xzP28资讯网——每日最新资讯28at.com

results = []for item in item_list:    # 建立    # 判断    # 处理    # 计算    results.append(result)

很明显,你为单个代码块分配了太多工作。相反,我建议你考虑下面的方法:xzP28资讯网——每日最新资讯28at.com

def process_item(item):    # 建立    # 判断    # 处理    # 计算    return resultresults = [process_item(item) for item in item_list]

有时,你可能需要使用嵌套函数,比如这样:xzP28资讯网——每日最新资讯28at.com

results = []for i in range(10):    for j in range(i):        results.append((i, j))

它可以被改写为:xzP28资讯网——每日最新资讯28at.com

results = [(i, j)           for i in range(10)           for j in range(i)]

有时,你的代码需要保持一些内部状态,例如:xzP28资讯网——每日最新资讯28at.com

my_list = [10, 4, 13, 2, 1, 9, 0, 7, 5, 8]results = []current_max = 0for i in my_list:    current_max = max(i, current_max)    results.append(current_max)

这可以被重写为:xzP28资讯网——每日最新资讯28at.com

from itertools import accumulatemy_list = [10, 4, 13, 2, 1, 9, 0, 7, 5, 8]results = list(accumulate(my_list, max))

现在是不是已经看起来更像Python了?此外,第二种方法,使用accumulate from itertools模块,拿来做累积运算通常更有效率且更Pythonic,原因有以下几点:xzP28资讯网——每日最新资讯28at.com

内置函数效率:accumulate是Python中的内置函数,特地被优化来执行累积运算的任务,基本上比手动实现的for循环来得快。xzP28资讯网——每日最新资讯28at.com

可读性:accumulate函数清楚地传达了用特定的操作(在本例中为max)累积值的意图,使代码更容易理解。xzP28资讯网——每日最新资讯28at.com

简洁性:第二种办法更简洁,与第一种办法的四行代码相比,只需两行就可完成任务。这就减少了出错的可能性,也让代码更干净。xzP28资讯网——每日最新资讯28at.com

扩展性和维护性: 使用accumulate及其它内置函数,代码更容易维护,改变也更容易,比如:应用除了max之外的其他操作。xzP28资讯网——每日最新资讯28at.com

xzP28资讯网——每日最新资讯28at.com

总结

本文主要讨论了不同的Python编程策略,包括优化嵌套结构代码,列表推导式和生成器表达式的使用,map和reduce函数的应用以及高效使用多函数并在适当的地方使用内建库。xzP28资讯网——每日最新资讯28at.com

  • 嵌套结构的优化有助于提高代码的可读性和清晰度,让控制流结构更直观,业务逻辑更易于理解。
  • 列表推导和生成器表达式是处理列表和可迭代对象的强大工具,它们能够使代码更加紧凑、高效。
  • map和reduce函数可用于将特定功能应用于序列,进一步提高代码的效率和可读性。
  • 熟练地使用函数可以简化复杂的逻辑,使代码更易于维护,也符合Python的简易优雅原则。
  • 最后,使用Python自带的功能,如内置函数和模块,可以提高代码的效率和可读性,让代码更“Python化。”

综上,只要掌握各种编程策略和Python内部功能,就可以优化你的代码,从而提高编程效率,使代码更容易理解,维护和修改。xzP28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-87965-0.htmlPython for循环如何更加Pythonic

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

上一篇: 这个 TypeScript 技巧会让你大吃一惊

下一篇: 一篇文章带你弄懂Python基础之进制和数据类型

标签:
  • 热门焦点
  • 小米官宣:2023年上半年出货量中国第一!

    今日早间,小米电视官方微博带来消息,称2023年小米电视上半年出货量达到了中国第一,同时还表示小米电视的巨屏风暴即将开始。“公布一个好消息2023年#小米电视上半年出货量中国
  • 太卷!Redmi MAX 100英寸电视便宜了:12999元买Redmi史上最大屏

    8月5日消息,从小米商城了解到,Redmi MAX 100英寸巨屏电视日前迎来官方优惠,到手价12999元,比发布价便宜了7000元,在大屏电视市场开卷。据了解,Redmi MAX 100
  • Rust中的高吞吐量流处理

    作者 | Noz编译 | 王瑞平本篇文章主要介绍了Rust中流处理的概念、方法和优化。作者不仅介绍了流处理的基本概念以及Rust中常用的流处理库,还使用这些库实现了一个流处理程序
  • 多线程开发带来的问题与解决方法

    使用多线程主要会带来以下几个问题:(一)线程安全问题  线程安全问题指的是在某一线程从开始访问到结束访问某一数据期间,该数据被其他的线程所修改,那么对于当前线程而言,该线程
  • 从零到英雄:高并发与性能优化的神奇之旅

    作者 | 波哥审校 | 重楼作为公司的架构师或者程序员,你是否曾经为公司的系统在面对高并发和性能瓶颈时感到手足无措或者焦头烂额呢?笔者在出道那会为此是吃尽了苦头的,不过也得
  • 零售大模型“干中学”,攀爬数字化珠峰

    文/侯煜编辑/cc来源/华尔街科技眼对于绝大多数登山爱好者而言,攀爬珠穆朗玛峰可谓终极目标。攀登珠峰的商业路线有两条,一是尼泊尔境内的南坡路线,一是中国境内的北坡路线。相
  • 猿辅导与新东方的两种“归途”

    作者|卓心月 出品|零态LT(ID:LingTai_LT)如何成为一家伟大企业?答案一定是对“势”的把握,这其中最关键的当属对企业战略的制定,且能够站在未来看现在,即使这其中的
  • iQOO 11S屏幕细节公布:首发三星2K E6全感屏 安卓最好的直屏手机

    日前iQOO手机官方宣布,新一代电竞旗舰iQOO 11S将会在7月4日19:00正式与大家见面。随着发布时间的日益临近,官方关于该机的预热也更加密集,截至目前已
  • 华为举行春季智慧办公新品发布会 首次推出电子墨水屏平板

    北京时间2月27日晚,华为在巴塞罗那举行春季智慧办公新品发布会,在海外市场推出之前已经在中国市场上市的笔记本、平板、激光打印机等办公产品,并首次推出搭载
Top