每当我遇到可以用JavaScript实现的情况时,我总是在想是否有一个foreach
函数会更方便。这里所说的foreach函数是指下面描述的函数:
def foreach(fn,iterable):
for x in iterable:
fn(x)
他们只是在每个元素上执行它,没有产生任何结果或返回值,我认为这应该是一个内置函数,并且应该比使用纯Python编写更快,但我在列表中没有找到它,或者它被称为其他名称?还是我遗漏了一些要点?
也许我错了,因为在Python中调用函数的成本很高,对于这个例子来说肯定不是一个好的做法。与其使用外部循环,函数应该在其内部进行循环,在下面的代码中看起来像这样,这已经在许多Python代码建议中提到:
def fn(*args):
for x in args:
dosomething
但是我认为基于以下两个事实,foreach仍然受到欢迎:
- 在普通情况下,人们并不关心性能问题
- 有时API无法接受可迭代对象,而你无法重写其源代码。
for
用来做的。 - user2357112list.each(func)
比for item in list: func(item)
更加清晰。问题是,Python 已经成功地用列表推导式取代了一些函数式编程喜爱的方法,如map()
和filter()
,而这些列表推导式使用内置的for
和if
语句(它们是同构且易读的),加入一个特定的.each()
可能会违背这种趋势。 - sevkosum(0 for _ in map(f, seq))
是一种易读的解决方法。 - Johannes Schaub - litbforeach
来表示某些非标准的意思。实际上,对于那些拥有它的语言,foreach
通常只是与 Python 的for
相同,而 OP 似乎正在寻找像map
或列表推导式一样的东西,以便将某个输入序列的每个元素应用一个函数。根据一些答案,似乎 OP 还认为有某种基于序列的方法。本质上,这些答案显示出 OP 被多种不同的方式解释了,并且这里的所有材料都可以通过其他问题更好地解决。 - Karl Knechtel