当我遇到这种情况时,我可以用javascript来做,我总是认为如果有一个foreach函数,它会很方便。foreach指的是下面描述的函数:
def foreach(fn,iterable):
for x in iterable:
fn(x)
他们只是在每个元素上都这样做,不产生或返回一些东西,我认为它应该是一个内置函数,应该比用纯Python编写它更快,但我没有在列表中找到它,或者它只是叫另一个名字?还是我漏了一些地方?
也许我错了,因为在Python中调用一个函数代价很高,对于这个例子来说绝对不是一个好的实践。函数应该在内部进行循环,而不是out循环,它的主体如下所示,这在许多python代码建议中已经提到过:
def fn(*args):
for x in args:
dosomething
但基于以下两个事实,我认为两者都是受欢迎的:
在正常情况下,人们只是不关心性能
有时API不接受可迭代对象,你不能重写它的源代码。
正确答案是“python集合没有foreach”。在原生python中,我们需要使用外部的for _element_ In _collection_语法,这不是OP所追求的。
一般来说,Python在函数式编程方面相当薄弱。有一些库可以减轻一些压力。我帮助撰写了其中一本
PIP安装infixpy https://pypi.org/project/infixpy/
from infixpy import Seq
(Seq([1,2,3]).foreach(lambda x: print(x)))
1
2
3
另请参阅:Python 3中从左到右对列表操作的应用
Python本身并没有foreach语句。它在语言中内置了for循环。
for element in iterable:
operate(element)
如果你真的想,你可以定义自己的foreach函数:
def foreach(function, iterable):
for element in iterable:
function(element)
顺便说一句,可迭代语法中的for元素来自ABC编程语言,这是Python的影响之一。
我所见过的每一个“foreach”(PHP, c#,…)基本上都与python的“for”语句相同。
这些或多或少是等价的:
// PHP:
foreach ($array as $val) {
print($val);
}
// C#
foreach (String val in array) {
console.writeline(val);
}
// Python
for val in array:
print(val)
所以,是的,在python中有一个“foreach”。它叫做“for”。
你所描述的是一个“数组映射”函数。这可以用python中的列表推导式来实现:
names = ['tom', 'john', 'simon']
namesCapitalized = [capitalize(n) for n in names]