高阶函数与匿名函数
高阶函数
把函数作为参数传入,这样的函数称为高阶函数,函数式编程就是指这种高度抽象的编程范式。
常用高阶函数
map()
reduce()
filter()
sorted()
lambda 匿名函数
使用Python写一些执行脚本时,使用lambda可以省去定义函数的过程,让代码更加精简。
对于一些抽象的,不会别的地方再复用的函数,有时候给函数起个名字也是个难题,使用lambda不需要考虑命名的问题。
使用lambda在某些时候让代码更容易理解。
匿名函数是一个可迭代对象
##定义函数f def f(x): return x**2 print f(4)
Python中使用lambda的话,写成这样
##不需要定义函数名,直接赋值给变量g g = lambda x : x**2 print g(4)
map 函数
map()函数接收两个参数,一个是函数,一个是序列,map将传入的函数依次作用到序列的每个元素,并把结果作为新的list返回。
>>> a=range(10) >>> b=range(10) >>> c = lambda x : x**2 ##定义平方匿名函数,赋值给变量c >>> map(c,a) ##直接获得一个 a 列表中值得的平方 [0, 1, 4, 9, 16, 25, 36, 49, 64, 81] >>>map(lambda x,y:x**y, a,b) ##跟多个参数, [1, 1, 4, 27, 256, 3125, 46656, 823543, 16777216, 387420489]
reduce() 函数
函数会对参数序列中元素进行累积。
函数将一个数据集合(列表,元组等)中的所有数据进行下列操作:用传给reduce中的函数 function(有两个参数)先对集合中的第 1、2 个元素进行操作,得到的结果再与第三个数据用 function 函数运算,最后得到一个结果
语法
reduce(function, iterable[, initializer])
function -- 函数,有两个参数
iterable -- 可迭代对象
initializer -- 可选,初始参数
返回值 --计算结果
>>> a = lambda x, y: x+y ##lambda 定义平方匿名函数,赋值给变量a >>> reduce(a, [1,2,3,4,5]) ##计算列表中元素和 15 >>> reduce(a, [1,2,3,4,5], 10) ##将列表元素和作为a的一个参数与10再进行计算 25
sorted 函数
函数对所有可迭代的对象进行排序操作。
sort 是应用在 list 上的方法,sorted 可以对所有可迭代的对象进行排序操作。
list 的 sort 方法返回的是对已经存在的列表进行操作,而内建函数 sorted 方法返回的是一个新的 list,而不是在原来的基础上进行的操作。
>>> a={8:'d', 9:'e', 2:'a', 4:'z'} >>> sorted(a.items(), key=lambda x:x[0]) ##将字典换成列表,以key进行排序 [(2, 'a'), (4, 'z'), (8, 'd'), (9, 'e')] >>> sorted(a.items(), key=lambda x:x[1]) ##以值进行排序 [(2, 'a'), (8, 'd'), (9, 'e'), (4, 'z')]
filter()函数
用于过滤序列,过滤掉不符合条件的元素,返回由符合条件元素组成的新列表。
该接收两个参数,第一个为函数,第二个为序列,序列的每个元素作为参数传递给函数进行判,然后返回 True 或 False,最后将返回 True 的元素放到新列表中。
语法
filter(function, iterable)
参数
function -- 判断函数。
iterable -- 可迭代对象。
返回值 -- 列表。
过滤出列表中的所有奇数:
#!/usr/bin/python # -*- coding: UTF-8 -*- ##定义判断奇数函数,(取模余1) def is_odd(n): return n % 2 == 1 newlist = filter(is_odd, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]) print(newlist)
结果
[1, 3, 5, 7, 9]
<wiz_tmp_tag id="wiz-table-range-border" contenteditable="false" style="display: none;">
posted on 2017-11-02 21:46 song-liang 阅读(311) 评论(0) 编辑 收藏 举报