Collection.forEach 的正确 Python 方法是什么?

问题描述 投票:0回答:1

我最终不可避免地编写了很多看起来类似于

的函数
def forEach(function: typing.Callable, collection: typing.Iterable) -> typing.NoReturn:
    for item in collection:
        function(item)

几乎我使用过的每种语言都有某种形式的

forEach
函数,无论是 Javascript 中的 Array.forEach,Java 中的 Iterable.forEach,还是 C# 中的 List.forEach。 Python 列表没有这个。我和一些人交谈过,我们已经讨论出了像
any(function(item) for item in collection)
[function(item) for item in collection]
这样的东西,但是看起来应该有用的东西,比如
map(function, collection)
,在迭代之前不会做任何事情。

现在,我确信有 180 亿个 pip 包可以使用,但是有没有更优雅/Pythonic 的方法可以在 vanilla 中做到这一点?我上面的例子确实做到了这一点,但是我必须编写这样的函数或者每次调用它时都写出循环,这似乎仍然很奇怪。

python list
1个回答
1
投票

对于那些对未来感兴趣的人,普遍的共识是 KISS - 一个简单的 for 循环就足够了,没有理由深入到集合拥有的

forEach
函数的世界中。

创建一个函数来对集合执行循环会增加不必要的开销,尽管它很小。

来自另一种语言,比如 Javascript,以下内容可能会感觉很自然:

['one', 'two', 'three'].forEach(console.log)

但你也可以用 Python 拼写出来:

for word in ['one', 'two', 'three']:
    print(word)

而不是类似:

forEach(print, ['one', 'two', 'three'])

单行代码并没有增加太多内容,那些在 Python 上花费更多时间而不是在其他语言上的开发人员乍一看可能会双重接管它。

TL;博士

如果你对此深思熟虑,那你就想得太多了。

© www.soinside.com 2019 - 2024. All rights reserved.