当我遇到这种情况时,我可以用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不接受可迭代对象,你不能重写它的源代码。
地图可以用于问题中提到的情况。
E.g.
map(len, ['abcd','abc', 'a']) # 4 3 1
对于接受多个参数的函数,可以给map更多参数:
map(pow, [2, 3], [4,2]) # 16 9
它在python2中返回一个列表。X和python 3中的迭代器
如果你的函数有多个参数,并且参数已经是元组的形式(或者自python 2.6以来的任何可迭代对象),你可以使用itertools.starmap。(它的语法与您正在寻找的非常相似)。它返回一个迭代器。
如。
for num in starmap(pow, [(2,3), (3,2)]):
print(num)
得到8和9
python中没有from functools import foreach支持。然而,无论如何,你可以用与导入相同的行数来实现:
foreach = lambda f, iterable: (*map(f, iterable),)
奖金:
可变参数支持:foreach = lambda f, iterable, *args: (*map(f, iterable, *args),)你可以通过避免构造Nones元组来提高效率
Python本身并没有foreach语句。它在语言中内置了for循环。
for element in iterable:
operate(element)
如果你真的想,你可以定义自己的foreach函数:
def foreach(function, iterable):
for element in iterable:
function(element)
顺便说一句,可迭代语法中的for元素来自ABC编程语言,这是Python的影响之一。