簡體   English   中英

python 中的函數式編程 - 一起使用 map()、filter() 和 sum() - java.stream() 是否等效?

[英]functional programming in python - using map(), filter(), and sum() together - java .stream() equivalent?

我正在 Python 和 Java 學習函數式編程。

我有一些 Java 代碼,可以從列表中找出雙倍偶數的總和。

我想在 Python 中使用函數式編程來做同樣的事情(即從列表中找到偶數的雙倍之和)。 就同時使用 filter()、map() 和 sum()以及代碼可讀性而言,什么是好的做法?

我在 Python 中編寫的內容(見下文)完成了這項工作,但可讀性不是很好。

謝謝你的幫助!

# JAVA

import java.util.Arrays;
import java.util.List;
public class GFG {
    public static void main(String[] args)
    {
        List<Integer> numbers
            = Arrays.asList(11, 22, 33, 44,
                            55, 66, 77, 88,
                            99, 100);
 
        System.out.println(
            numbers.stream()
                .filter(number -> number % 2 == 0)
                .mapToInt(e -> e * 2)
                .sum());
    }
}

// OUTPUT: 640 

# PYTHON 

class GFG:

    @staticmethod
    def main():
        numbers = [11, 22, 33, 44, 55, 66, 77, 88, 99, 100]
        print(sum(map(lambda x: x * 2, (filter(lambda x: x % 2 == 0, numbers)))))
   

GFG.main()

# OUTPUT: 640 

sum生成器表達式一起使用。

sum(x * 2 for x in numbers if x % 2 == 0)

Python 可讀性較差的原因是mapfilter等在 Java 中是方法,而在 Python 中它們是函數。這意味着在 Java 中,您可以使用縮進使所有內容以流暢的方式從左到右閱讀。

沒有什么特別的原因不能在 Python 中創建自己的 stream:

class MyStream:
     def __init__(iterator):
          self.iterator = iterator

     def map(func):
          return MyStream(map(func, self.iterator))
     
     def filter(func):
          return MyStream(filter(func, self.iterator))
     ...

在 Python 中實際上沒有人會這樣做,因為列表理解和生成器表達式被認為更具可讀性。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM