Python 3中是否有'foreach'功能?

use*_*548 115 python foreach python-3.x

当我遇到这种情况时我可以用javascript来做,我总是认为如果有一个foreach功能就会方便.通过foreach我的意思是下面描述的功能:

def foreach(fn,iterable):
    for x in iterable:
        fn(x)
Run Code Online (Sandbox Code Playgroud)

他们只是在每个元素上做它并且没有产生或返回一些东西,我认为它应该是一个内置函数,并且应该比用纯Python编写它更快,但我没有在列表中找到它,或者它只是叫另一个名字?或者我在这里错过了一些观点?

也许我错了,因为调用Python中的函数成本很高,对于这个例子来说绝对不是一个好习惯.该函数不应该是一个out循环,而应该在它的正文中执行循环,如下所示,在许多python的代码建议中已经提到过:

def fn(*args):
    for x in args:
       dosomething
Run Code Online (Sandbox Code Playgroud)

但我认为foreach仍然受到以下两个事实的欢迎:

  1. 在正常情况下,人们只是不关心性能
  2. 有时API不接受可迭代对象,您无法重写其源.

Jo *_* By 145

我见过的每个"foreach"(PHP,C#,......)都与pythons"for"语句基本相同.

这些或多或少是等价的:

// PHP:
foreach ($array as $val) {
    print($val);
}

// C#
foreach (String val in array) {
    console.writeline(val);
}

// Python
for val in array:
    print(val)
Run Code Online (Sandbox Code Playgroud)

所以,是的,python中有一个"foreach".它被称为"for".

您所描述的是"阵列图"功能.这可以通过python中的列表推导来完成:

names = ['tom', 'john', 'simon']

namesCapitalized = [capitalize(n) for n in names]
Run Code Online (Sandbox Code Playgroud)

  • 它不是map(),因为map()会累积并返回一个列表,而foreach()则不会.如果您在一长串项目上进行迭代,那么差异可能非常大.同意for()有诀窍. (5认同)
  • 他们询问了功能,但你回答了声明. (5认同)
  • 我已经看到这被称为__for-in__循环. (2认同)
  • @弗朗西斯科我说地球不平坦也是正确的。但我不会将其添加为答案。 (2认同)

Phi*_*oud 44

Python没有一个foreach说法本身.它有for内置于语言中的循环.

for element in iterable:
    operate(element)
Run Code Online (Sandbox Code Playgroud)

如果你真的想,你可以定义自己的foreach功能:

def foreach(function, iterable):
    for element in iterable:
        function(element)
Run Code Online (Sandbox Code Playgroud)

作为旁注,for element in iterable语法来自ABC编程语言,这是Python的影响之一.

  • 如果你是为了副作用而不是映射的结果,那么以这种方式使用`map`实际上并不适用于Python 3中`map`是懒惰的.也就是说,它现在返回一个迭代器,而不是已经计算过的列表.在遍历结果列表之前,不会发生副作用. (13认同)

uin*_*tea 29

其他例子:

Python Foreach循环:

array = ['a', 'b']
for value in array:
    print(value)
    # a
    # b
Run Code Online (Sandbox Code Playgroud)

Python For循环:

array = ['a', 'b']
for index in range(len(array)):
    print("index: %s | value: %s" % (index, array[index]))
    # index: 0 | value: a
    # index: 1 | value: b
Run Code Online (Sandbox Code Playgroud)


jav*_*dba 15

正确的答案是“python 集合没有foreach。在本机Python中,我们需要诉诸外部for _element_ in _collection_语法,这不是OP所追求的。

一般来说,Python 对于函数式编程来说相当薄弱。有一些库可以稍微缓解一下。我帮助创作了其中一篇infixpy

pip install infixpy https://pypi.org/project/infixpy/

from infixpy import Seq
(Seq([1,2,3]).foreach(lambda x: print(x)))
1
2
3
Run Code Online (Sandbox Code Playgroud)

另请参阅: Python 3 中列表上的操作从左到右应用

  • 这就是我一直在寻找的答案。大多数其他答案都不清楚 python 缺乏内置的 for every in 循环,只是提供了解决方法。干杯! (2认同)

Cav*_*man 6

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

for x in ['a', 'b']: print(x)
Run Code Online (Sandbox Code Playgroud)


Aks*_*ana 5

map 在大多数情况下,对于问题中提到的情况是优选的.

例如

map(len, ['abcd','abc', 'a']) # 4 3 1
Run Code Online (Sandbox Code Playgroud)

对于带有多个参数的函数,可以为map提供更多参数:

map(pow, [2, 3], [4,2]) # 16 9
Run Code Online (Sandbox Code Playgroud)

它返回python 2.x中的列表和python 3中的迭代器

如果你的函数有多个参数,并且参数已经是元组的形式(或者自python 2.6以来的任何迭代)你可以使用itertools.starmap.(它的语法与你想要的语法非常相似).它返回一个迭代器.

例如

for num in starmap(pow, [(2,3), (3,2)]):
    print(num)
Run Code Online (Sandbox Code Playgroud)

给了我们8和9

  • `map`和`foreach`有不同的含义.`map`返回结果列表(这意味着创建一个列表,或一个可枚举的结构,或一个将被消费的结构,因此不立即调用),`foreach`调用每个项的函数,忽略结果. (3认同)
  • 当结果被忽略时使用“map()”是一种反模式。您应该使用 for 循环。 (2认同)
  • 使用“map”并忽略结果将在 Python 3 中产生不需要的结果,因为“map”现在仅在使用结果列表时才进行延迟计算。如果“map”的结果从未被消耗,则永远不会应用调用。 (2认同)

小智 5

这在 python 3 中执行 foreach

test = [0,1,2,3,4,5,6,7,8,"test"]

for fetch in test:
    print(fetch)
Run Code Online (Sandbox Code Playgroud)

  • 这并不能回答问题。 (11认同)

sim*_*eco 5

这是在 Python 中同时访问元素索引“foreach”构造示例:

for idx, val in enumerate([3, 4, 5]):
    print (idx, val)
Run Code Online (Sandbox Code Playgroud)