高阶函数:一个函数可以作为参数传给另外一个函数,或者一个函数的返回值为另外一个函数(若返回值为该函数本身,则为递归),满足其一则为高阶函数。
1.map()
map()是 Python 内置的高阶函数,它接收一个函数function 和一个 list,并通过把函数 function 依次作用在 list 的每个元素上,得到一个新的 list 并返回。
def test(x):return x+1re = map(test,[1,3,4,6,7])
print(list(re)) >> [2, 4, 5, 7, 8]
map函数返回的re是一个Iterator,Iterator是惰性可迭代序列,因此通过list()函数让它把整个序列都计算出来并返回一个list。
filter()
filter()接收一个函数function 和一个list,这个function 的作用是对list的每个元素进行判断,返回True或False,filter()根据判断结果自动过滤掉不符合条件的元素,返回由符合条件元素组成的新list。
def test(x):if x>3:return Truereturn Falsere = filter(test,[1,3,4,6,7])
print(list(re)) >> [4, 6, 7]
reduce()
reduce的工作过程是 :在迭代序列的过程中,首先把 前两个元素(只能两个)传给 函数,函数加工后,然后把 得到的结果和第三个元素 作为两个参数传给函数参数, 函数加工后得到的结果又和第四个元素 作为两个参数传给函数参数,依次类推。
在Python 3里,reduce()函数已经被从全局名字空间里移除了,它现在被放置在fucntools模块里, 要使用的话要 先引入from functools import reduce
from functools import reducedef test(x,y):return x+yre = reduce(test,[1,3,4,6,7])
print(re)
lambda
lambda作用是简化函数书写,返回函数名
#带参数
g = lambda x:x+1 #x为参数,x+1为函数体g(2) >>3#不带参数
f = lambda 123f() >> 123
filter与lambda的结合使用
>>> foo = [2, 18, 9, 22, 17, 24, 8, 12, 27]>>>>>> print filter(lambda x: x % 3 == 0, foo)
[18, 9, 24, 12, 27]>>>>>> print map(lambda x: x * 2 + 10, foo)
[14, 46, 28, 54, 44, 58, 26, 34, 64]>>>>>> print reduce(lambda x, y: x + y, foo)139
列表推导式
函数简写不一定要用lambda,一些递归数据操作也可用列表推导式
# 构建一个1-100的列表
l1 = [i for i in range(1,101)]
print(l1)# 输出结果
[1,2,3,4,5,6,...100]#带条件的列表推导式
# 构建一个列表,要求元素大于4
print([i for i in range(11) if i > 4])# 输出结果:
[5, 6, 7, 8, 9, 10]