Python实用的内置函数
Python内置了一些比较特殊又实用的函数,使用这些函数能使你的代码简洁易读
记录一些函数 lambda map reduce filter 做笔记
匿名函数 lambda
匿名函数实例如下
In [1]: summation = lambda x,y: x+y # 定义匿名函数
In [2]: summation(2, 3) # 调用匿名函数
Out[2]: 5
- lambda语句中, lambda是关键词,冒号之前的参数以逗号隔开,之后是表达式,lambda会返回表达式的结果
lambda是一个表达式,用来编写简单的函数
- 省去函数定义过程,快速定义单行的函数,让代码更加精简
- 无需复用的函数,省去函数名称
- 可以和map reduce filter结合使用
映射函数 map
map函数接收一个函数func和一个可迭代对象iterate, 把函数func依次作用与iterate的每个元素, 把func返回值重新组成新的iterate并返回
In [3]: map(lambda x: x*2, range(10)) # range(10)中每个元素乘2
Out[3]: <map at 0x26f7cec37b8> # 返回的是可迭代对象
In [4]: list(_)
Out[4]: [0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
Python3中返回的是可迭代对象而不是列表
函数 reduce
Python3中需要从functools导入
reduce函数接收2个参数一个是函数func, 一个是可迭代对象iterate, func是一个接收2个参数的函数,reduce依次从iterate中取出一个元素,和上次调用func的结果做参数再次调用func
In [5]: from functools import reduce # 导入reduce函数
In [6]: reduce(lambda x,y: x+y, range(10)) # 求和 range(10)
Out[6]: 45
In [7]: sum(range(10)) # 使用求和函数
Out[7]: 45
reduce可以接收第一次计算的初始值 initial在取出iterate中第一个元素时,与initial一起传入func
reduce(function, sequence[, initial]) -> value
函数 filter
filter函数对可迭代对象做过滤操作,也有2个参数, 一个返回布尔值的func 和 一个可迭代对象iterate
filter(function or None, iterable) --> filter object
filter函数对每个iterate元素调用func方法,若返回结果为True则保留该元素,否则丢弃
In [8]: filter(lambda x: x%2==0, range(10)) # 取range(10)中的偶数
Out[8]: <filter at 0x26f7e0cb5c0> # 返回filter object 可迭代对象
In [9]: list(_)
Out[9]: [0, 2, 4, 6, 8]
练习
- Python内置了求和函数sum,请用reduce写一个求积函数
In [12]: reduce(lambda x,y: x*y, range(1,10))
Out[12]: 362880
2.使用filter过滤出100以内平方根整除的数
In [13]: import math
In [14]: filter(lambda x: math.sqrt(x)%1==0, range(1, 101))
Out[14]: <filter at 0x26f7e0e7710>
In [15]: list(_)
Out[15]: [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]