为什么要使用filter()而不是'通常'def函数?

时间:2015-12-28 21:23:37

标签: python

请你帮我理解为什么在Python中使用filter()而不是def-function?除了它更具可读性。

谢谢。

例如,

这一个def-function:

def do_even_check(num):
    for i in num:
        if i % 2 ==0:
            print(i)
        else:
            pass

my_list = [1,2,3,4,5,6,7,8,9,10]

do_even_check(my_list)

这个filter()lambda

filter(lambda num: num % 2 == 0, my_lst)

2 个答案:

答案 0 :(得分:2)

filter选项更好,因为结果可能会被重复使用,而do_even_check(num):函数总是打印输出,阻碍了它在程序其他部分的重复使用。

无论如何,完成此任务的最佳方法既不是你的两种可能性,而是生成器表达式:

evens = (i for i in my_list if i % 2 == 0)

因为它是最可读但最简洁的。

答案 1 :(得分:0)

我提倡过滤,映射和缩减(以及列表理解)是有用的,因为它们通常会导致更少的代码行,这使您的代码更易于维护。它们是从功能范例中采用的,其中一些语言提倡类型安全。虽然python不是一种类型安全的语言,但它可以通过使用这些函数(过滤器,映射,减少)或甚至任何自己的defs函数构建来创建可预测性,因为您将知道它们的返回值(项目列表或单个并且可能它们也被团队中的其他开发人员所知,并且可能更好地记录,而你的defs可能是无效的(没有像打印函数那样的返回值),返回苹果或字符串或任何东西。