【问题标题】:Python Java forEach equivalentPython Java forEach 等价物
【发布时间】:2016-10-10 10:57:52
【问题描述】:

我是 Java 程序员。几天前我开始学习 Python。 我想知道:是否有任何等价物

map.forEach(System.out::println)

在 Python 中使用 lambda? 或仅使用 for 循环:

for e in map: print(e)

【问题讨论】:

    标签: java python python-3.x lambda


    【解决方案1】:

    没有等效于 Java 的命令式 Iterable.forEachStream.forEach 方法。有一个map 函数,类似于Java 的Stream.map,但它用于将转换应用于可迭代对象。与 Java 的 Stream.map 一样,在您对返回值执行终端操作之前,它实际上不会应用该函数。

    你可以滥用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)
    

    【讨论】:

      【解决方案2】:

      Python 还有一个map 函数,它使用语法map(function, iterable, ...)

      请参阅 Python 文档:https://docs.python.org/2/library/functions.html#map

      【讨论】:

      • 但是为什么这样:a = {1, 2, 3} map(lambda x: print(x), a) - 不会打印任何东西?
      • 看到这个 SO 问题:stackoverflow.com/questions/7731213/… 我希望它能回答你的问题 :)
      • @Don_Quijote 映射返回一个新列表,其元素数量与原始列表相同。然而 print 函数并没有返回任何东西。因此无法创建此新列表。
      • @Don_Quijote 但是你可以创建一个新函数 def custom_print(x): print(x); return x 有副作用,然后使用 map(custom_print, a) 但我宁愿不建议这样的做法
      猜你喜欢
      • 1970-01-01
      • 2011-06-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-23
      • 2012-06-03
      • 2013-01-15
      • 1970-01-01
      相关资源
      最近更新 更多