当我遇到这种情况时,我可以用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不接受可迭代对象,你不能重写它的源代码。


当前回答

如果你只是寻找一个更简洁的语法,你可以把for循环放在一行:

array = ['a', 'b']
for value in array: print(value)

只需要用分号分隔额外的语句。

array = ['a', 'b']
for value in array: print(value); print('hello')

这可能不符合您的本地风格指南,但当您在控制台上玩游戏时,这样做是有意义的。

其他回答

是的,尽管它使用了与for循环相同的语法。

for x in ['a', 'b']: print(x)

如果你真的想,你可以这样做:

[fn(x) for x in iterable]

但是列表理解的重点是创建一个列表-仅为副作用使用它是糟糕的风格。for循环的输入也更少

for x in iterable: fn(x)

如果你只是寻找一个更简洁的语法,你可以把for循环放在一行:

array = ['a', 'b']
for value in array: print(value)

只需要用分号分隔额外的语句。

array = ['a', 'b']
for value in array: print(value); print('hello')

这可能不符合您的本地风格指南,但当您在控制台上玩游戏时,这样做是有意义的。

下面是在Python中同时访问元素索引的"foreach"结构的示例:

for idx, val in enumerate([3, 4, 5]):
    print (idx, val)

Python本身并没有foreach语句。它在语言中内置了for循环。

for element in iterable:
    operate(element)

如果你真的想,你可以定义自己的foreach函数:

def foreach(function, iterable):
    for element in iterable:
        function(element)

顺便说一句,可迭代语法中的for元素来自ABC编程语言,这是Python的影响之一。