一 前言 在编写Python 程序或者工具脚本时,需要完成某个功能,可以选择编写一个具体的函数达到目的,当然也可以通过匿名/Python 内建函数来完成。本文讲述常见的Python匿名、内建函数:lambda,map,filter,reduce .
二 例子 2.1 Lambda 是一个匿名函数 其语法为:lambda parameters:express parameters:可选,通常是逗号分隔的变量表达式形式,即位置参数。 expression:不能包含分支或循环(但允许条件表达式),也不能包含return(或yield)函数。如果为元组,则应用圆括号将其包含起来。 调用lambda函数,返回的结果是对表达式计算产生的结果。 根据参数是否为2的倍数 返回yes or no
上面例子中,将if...else语句缩减为单一的条件表达式,语法为:
如果A为True,条件表达式的结果为expression1,否则为expression2 。 使用匿名函数的优点是代码简洁 ,但是不宜读 ,推荐 for ..in ...if 语法进行遍历迭代。 2.2 filter 过滤 其语法为 filter(function, sequence) 意义是:对sequence中的item 依次迭代调用function(item),根据执行结果为True或者False来保留或者丢弃该元素。并将保留的item组成一个List/String/Tuple(取决于sequence的类型 ) filter()把传入的函数依次作用于每个元素,然后根据返回值是True还是False决定保留还是丢弃该元素。
2.3 map 映射 其语法为map(function, sequence): map()的用法和filter()类似,也是将序列放入函数进行运算,但是,不论运算结果为什么,map()将返回结果也即返回的结果元素个数和sequence一样多,filter是返回符合条件的值。这是map()和filter()的主要区别。请注意,filter()和map()中的function都必要有一个返回值。同样获取能否被3整除的值,map 返回的是True/False 列表,filter返回的是符合条件的元素结果集。
2.4 reduce 其语法为 reduce(function, sequence, starting_value) 意义是:对sequence中的item 依次调用function。reduce(f, [x1, x2, x3, x4]) = f(f(f(x1, x2), x3), x4) 如果有starting_value,还可以作为初始值调用,比如1-100的list求和:
三 小结 本文总结了python内置函数和匿名函数,在编程时合理的运用能够极大的提高开发效率。推荐参考 https://www.python.org/dev/peps/pep-0289/