在Python中,与Ruby的Array.each方法相当的是什么? Python是否有一个漂亮而简短的闭包/lambda语法来实现它?
[1,2,3].each do |x|
puts x
end
new_values = map(print, [1, 2, 3])
如果你已经有一个函数了,比如 print
,那看起来就很好用。但是如果你只有一些随意的表达式,想在map
中使用它们,你需要使用def
或者lambda
将其转换为函数,像这样:
new_values = map(lambda x: print(x), [1, 2, 3])
那似乎是你想要避免的丑陋之处。Python有一种不错的方法可以避免它:理解:
new_values = [print(x) for x in values]
然而,在这种情况下,你只是想为每个值执行一些语句,而不是累加每个值的新值。所以,虽然这样可以工作(你会得到一个由None
值组成的列表),但这绝不是惯用方法。
在这种情况下,正确的做法是明确编写它——没有闭包、没有函数、也没有推导式,只有一个循环:
for x in values:
print x
最为惯用的:
for x in [1,2,3]:
print x
>>> import numpy as np
>>> a = np.array([1, 2, 3])
>>> a * 3
array([3, 6, 9])
>>> array_lambda=np.vectorize(lambda x: x * x)
>>> array_lambda([1, 2, 3])
array([1, 4, 9])
但是正如其他人所说,如果你只想打印每一个,请使用循环。
还有一些库可以封装对象来暴露所有常见的函数式编程内容。
github underscore.py
)例如,pydash允许您执行以下操作:
>>> from pydash import py_
>>> from __future__ import print_function
>>> x = py_([1,2,3,4]).map(lambda x: x*2).each(print).value()
2
4
6
8
>>> x
[2, 4, 6, 8]
.value()
来取消包装的值!)list(print(_) for _ in [1, 2, 3])
[print(_) for _ in [1, 2, 3]]
from__future__import print_function
);或许我应该使用sys.stdout.write
或其他相似的方式来代替print
,以避免这种情况...但如果你理解了所有内容,我想这已经足够好了。 - abarnert