我是Java程序员。几天前我开始学习Python。我在想:是否有任何等价物
map.forEach(System.out::println)
Python中的lambdas?或者只使用for循环:
for e in map: print(e)
hivapdat1#
没有与Java的命令式Iterable.forEach或Stream.forEach方法等效的方法。有一个map函数,类似于Java的Stream.map,但它用于将转换应用于可迭代对象。像Java的Stream.map一样,它实际上并不应用函数,直到您对返回值执行终结符操作。您可以滥用map来完成forEach的工作:
Iterable.forEach
Stream.forEach
map
Stream.map
forEach
list(map(print, iterable))
但这是一个坏主意,从一个不应该有任何副作用的函数中产生副作用,并建立一个你不需要的巨大列表。就像是
someList.stream().map(x -> {System.out.println(x); return x;}).collect(Collectors.toList())
在Java中。在Python中实现这一点的标准方法是一个循环:
for thing in iterable: print(thing)
uurity8g2#
Python还有一个map函数,它使用的语法是map(function, iterable, ...)参见Python文档:https://docs.python.org/2/library/functions.html#map
map(function, iterable, ...)
bpzcxfmw3#
没有内置的流,但您可以使用PyStreamAPI。它支持并行和顺序流,延迟执行所有操作,此外还提供NumericStreams。下面是一个示例,演示了PyStreamAPI的工作原理:
NumericStreams
from pystreamapi import Stream Stream.of([" ", '3', None, "2", 1, ""]) \ .filter(lambda x: x is not None) \ .map(str) \ .map(lambda x: x.strip()) \ .filter(lambda x: len(x) > 0) \ .map(int) \ .sorted() \ .for_each(print) # Output: 1 2 3
此外,PyStreamAPI支持简化处理逻辑的条件:
from pystreamapi import Stream from pystreamapi.conditions import odd, less_than, prime Stream.of(range(10))\ .filter(odd())\ .take_while(less_than(6))\ .any_match(prime()) # True
希望这有帮助!
3条答案
按热度按时间hivapdat1#
没有与Java的命令式
Iterable.forEach
或Stream.forEach
方法等效的方法。有一个map
函数,类似于Java的Stream.map
,但它用于将转换应用于可迭代对象。像Java的Stream.map
一样,它实际上并不应用函数,直到您对返回值执行终结符操作。您可以滥用
map
来完成forEach
的工作:但这是一个坏主意,从一个不应该有任何副作用的函数中产生副作用,并建立一个你不需要的巨大列表。就像是
在Java中。
在Python中实现这一点的标准方法是一个循环:
uurity8g2#
Python还有一个
map
函数,它使用的语法是map(function, iterable, ...)
参见Python文档:https://docs.python.org/2/library/functions.html#map
bpzcxfmw3#
没有内置的流,但您可以使用PyStreamAPI。它支持并行和顺序流,延迟执行所有操作,此外还提供
NumericStreams
。下面是一个示例,演示了PyStreamAPI的工作原理:
此外,PyStreamAPI支持简化处理逻辑的条件:
希望这有帮助!