Python 高阶映射和过滤函数

Python 高阶映射和过滤函数,Python的两个内置高阶函数map()filter()基本上可以处理任何数据。总的说来,优化这两个函数以获得更高性能比较困难。后面会介绍Python 3.4的几个函数,包括imap()ifilter()ifilterfalse()等。

表达映射关系有3种方式,假设有函数f(x),集合对象C,可以用下面3种方式表达映射关系:

  • map()函数:map(f, C)
  • 生成器表达式:(f(x) for x in C)
  • 包含yield语句的生成器函数:
def mymap(f, C):
    for x in C:
        yield f(x)
mymap(f, C)

类似地,可以用下面3种方法把filter()函数应用于集合。

  • filter()函数:filter(f, C)
  • 生成器表达式:(x for x in C if f(x))
  • 包含yield语句的生成器函数:
def myfilter(f, C):
    for x in C:
        if f(x):
            yield x
myfilter(f, C)

不同方式的性能存在一定差异,其中map()filter()最快。更重要的是,可以用不同的方式扩展上面的映射和过滤,如下所示。

  • 可以创建一个更复杂的函数g(x)应用于每个元素,或者在处理前先对集合应用一个函数。这些方法对上面三种设计模式都适用,也是函数式设计擅长的领域。
  • 修改生成器表达式或者生成器函数中的for循环。比较常用的处理方法是为生成器表达式添加if从句,从而将映射和过滤合并到一次操作中。还可以合并mymap()函数和myfilter()函数,从而实现合并映射操作和过滤操作。

在软件不断完善和成熟的过程中,常通过修改循环体来调整数据结构。对此有多种设计模式,包括打包、拆包(或者展开)、平铺以及结构化,之前介绍过其中几种。

设计映射时,如果一个函数中包含太多转换,就要注意了。应尽量避免创建那些主要功能不明的函数。由于Python没有优化编译器,有时必须通过合并函数来手动优化一些低性能的应用。但只在别无他法时才可以使用这类优化,也就是说,只有在性能分析表明应用需要优化时,才进行优化。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程