Python提供了一个内联模块buildin。内联模块定义了一些开发中经常使用的函数。利用这些函数可以实现数据类型的转换、数据的计算、序列的处理等功能。下面将介绍内联模块中常用的函数。
1. apply()
Python3中移除了apply函数,所以不再可用了。调用可变参数列表的函数的功能只能使用在裂变前添加*来实现。
2. filter()
filter()可以对某个序列做过滤处理,判断自定义函数的参数返回的结果是否为真来过滤,并一次性返回处理结果。filter()的声明如下所示。
class filter(object)
filter(function or None, iterable) --> filter object
# filter(函数或None, 可迭代对象) => 返回对象
# list(filter(函数或None, 可迭代对象)) => 返回列表
下面这段代码演示了filter()过滤序列的功能。从给定的列表中过滤出大于0的数字。
>>> def func(x):
... if x > 0:
... return x
...
>>> print(filter(func, range(-9, 10))) #调用filter函数,返回的是filter对象
<filter object at 0x0000027ADC1999E8> #将filter对象转换为列表
>>> print(list(filter(func, range(-9, 10))))
[1, 2, 3, 4, 5, 6, 7, 8, 9]
注意: filter中的过滤函数func()的参数不能为空。否则,没有可以存储sequence(序列)元素的变量,func()也不能处理过滤。
3. reduce()
对序列中元素的连续操作可以通过循环来处理。例如,对某个序列中的元素累加操作。Python提供的reduce()也可以实现连续处理的功能。在Python2中reduce()存在于全局空间中,可以直接调用。而在Python3中将其移到了functools模块中,所以使用之前需要先引入。reduce()的声明如下所示。
reduce(func, sequence[, initial]) => value
【代码说明】
- 参数func是自定义的函数,在函数func()中实现对参数sequence的连续操作。
- 参数sequence待处理的序列。
- 参数initial可以省略,如果initial不为空,则initial的值将首先传入func()进行计算。如果sequence为空,则对initial的值进行处理。
- reduce()的返回值是func()计算后的结果。
下面这段代码实现了对一个列表的数字进行累加的操作。
>>> def sum(x, y):
... return x + y
...
>>> from functools import reduce
>>> print(reduce(sum, range(0, 10))) # 0+1+2+3+4+5+6+7+8+9
45
>>> print(reduce(sum, range(0, 10), 10)) #10+0+1+2+3+4+5+5+7+8+9
55
>>> print(reduce(sum, range(0, 0), 10)) #range(0, 0)返回空列表
10
reduce()还可以对数字进行乘法、阶乘等复杂的累计计算。
注意:如果用reduce()进行累计计算,必须在sum中定义两个参数,分别对应加法运算符两侧的操作数。
4. map()
map()对tuple元祖进行“解包”操作,调用时设置map()的第一个参数为None,map()的功能非常强大,可以对多个序列的每个元素都执行相同的操作,并返回一个map对象,map()的声明如下所示:
class map(object)
map(func, *iterables) --> map object
【代码说明】
- 参数func是自定义的函数,实现对序列每个元素的操作。
- 参数iterables是待处理的序列,参数iterables的个数可以是多个。
- map()的返回值是对序列元素处理后的列表。
下面这段代码实现了列表中数字的幂运算。
>>> def power(x):
... return x ** x
...
>>> print(map(power, range(1, 5)))
<map object at 0x0000027ADC199C88>
>>> print(list(map(power, range(1, 5))))
[1, 4, 27, 256]
>>> def power2(x, y):
... return x ** y
...
>>> print(map(power2, range(1, 5), range(5, 1, -1)))
<map object at 0x0000027ADC1B4438>
>>> print(list(map(power2, range(1, 5), range(5, 1, -1))))
[1, 16, 27, 16]
# 提供了两个列表参数。依次计算1^5、2^4、3^3、4^2,计算后的结果同样yield成一个iterable对象。
注意:如果map()中提供多个序列,则每个序列中的元素一一对应进行计算。如果每个序列的长度不相同,则短的序列后补充None,再进行计算。
常用内置函数一览表如下所示:
- abs(x):返回x的绝对值
- bool([x]):把一个值或表达式转换为bool类型。如果表达式x为值,返回true;否则,返回false
- delattr(obj.name):等价于del obj.name
- eval(s[, globals[, locals]]):计算表达式的值
- float(x):把数字或字符串转换为float类型
- hash(object):返回一个对象的hash值
- help([object]):返回内置函数的帮助说明
- id(x):返回一个对象的标识
- input([prompt]):接收控制台的输入,并把输入的值转换为数字
- int(x):把数字或字符串转换为整型
- len(obj):对象包含的元素个数
- range([start, ] end [, step]):生成一个列表并返回
- reduce(func, sequence[, initial]):对序列的值进行累计计算
- round(x, n = 0):四舍五入函数
- set([iterable]):返回一个set集合
- sorted(iterable[, cmp[, key[, reverse]]]):返回一个排序后的列表
- sum(iterable[, start = 0]):返回一个序列的和
- type(obj):返回一个对象的类型
- zip(iter1 [,iter2 […]]):把n个序列作为列表的元素返回