使用列表推导式实现副作用:非 Python 实践
Python 的列表推导式是基于现有可迭代对象创建新列表的强大工具。虽然它们提供了简洁且富有表现力的语法,但仅因为其副作用而使用列表推导式被认为是反 Python 的。
问题
考虑一个执行副作用的函数,例如例如打印到屏幕、更新 GUI 或写入文件。它返回一个值,但该值通常不令人感兴趣。
def fun_with_side_effects(x): ...side effects... return y
人们可能会想使用列表理解来调用此函数以获取其副作用,如下所示:
[fun_with_side_effects(x) for x in y if (...conditions...)]
请注意,结果列表未分配给变量。
反Pythonic Nature
强烈建议不要以这种方式使用列表推导式,原因如下:
- 效率低下:创建中间列表可能会很昂贵,特别是在以下情况下可迭代对象很大。该列表被创建但立即被丢弃,导致资源浪费。
- Unidiomatic:经验丰富的Python开发人员喜欢使用显式for循环来进行副作用操作。列表推导式通常用于创建新值。
- 混乱:通过丢弃列表,其他程序员可能会不清楚代码的意图。最好将副作用明确化。
首选方法
首选方法是使用 for 循环迭代可迭代对象并调用仅在必要时才使用副作用函数:
for x in y: if (...conditions...): fun_with_side_effects(x)
这种方法更高效、更惯用、更不易混淆。这清楚地表明该函数被调用主要是因为它的副作用。
以上是在 Python 中使用列表推导式来产生副作用是否被认为是不好的做法?的详细内容。更多信息请关注PHP中文网其他相关文章!

本文讨论了Python版本3.10中介绍的新“匹配”语句,该语句与其他语言相同。它增强了代码的可读性,并为传统的if-elif-el提供了性能优势

Python中的功能注释将元数据添加到函数中,以进行类型检查,文档和IDE支持。它们增强了代码的可读性,维护,并且在API开发,数据科学和图书馆创建中至关重要。

本文讨论了Python中的单位测试,其好处以及如何有效编写它们。它突出显示了诸如UNITSEST和PYTEST等工具进行测试。

文章讨论了Python的\ _ \ _ Init \ _ \ _()方法和Self在初始化对象属性中的作用。还涵盖了其他类方法和继承对\ _ \ _ Init \ _ \ _()的影响。

本文讨论了python中@classmethod,@staticmethod和实例方法之间的差异,详细介绍了它们的属性,用例和好处。它说明了如何根据所需功能选择正确的方法类型和DA

Inpython,YouAppendElementStoAlistusingTheAppend()方法。1)useappend()forsingleelements:my_list.append(4).2)useextend()orextend()或= formultiplelements:my_list.extend.extend(emote_list)ormy_list = [4,5,6] .3)useInsert()forspefificpositions:my_list.insert(1,5).beaware


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

SublimeText3 Linux新版
SublimeText3 Linux最新版

VSCode Windows 64位 下载
微软推出的免费、功能强大的一款IDE编辑器

Dreamweaver CS6
视觉化网页开发工具

Dreamweaver Mac版
视觉化网页开发工具

WebStorm Mac版
好用的JavaScript开发工具