常用内置函数
Python内置了一些实现特定功能的函数,这些函数无需由Python使用者重新定义,可直接使用。常用的Python内置函数如表1所示。
表1 Python常用内置函数
函数 | 说明 |
---|---|
abs() | 计算绝对值,其参数必须是数字类型 |
len() | 返回序列对象(字符串、列表、元组等)的长度 |
map() | 根据提供的函数对指定的序列做映射 |
help() | 用于查看函数或模块的使用说明 |
ord() | 用于返回Unicode字符对应的码值 |
chr() | 与ord()功能相反,用于返回码值对应的Unicode字符 |
filter() | 用于过滤序列,返回由符合条件的元素组成的新列表 |
下面演示表1中部分函数的使用方法。
1.abs()函数
abs()函数用于计算绝对值,其参数必须是数字类型。需要说明的是,如果参数是一个复数,那么abs()函数返回的绝对值是此复数与它的共轭复数乘积的平方根。示例代码如下:
prit(abs(-5))
print(abs(3.14))
print(abs(8 + 3j))
运行代码,结果如下所示:
5
3.14
8.54400374531753
2.map()函数
map函数会根据提供的函数对指定的序列做映射。
map函数的定义如下:
map(function, sequence[, sequence, ...]) -> list
在上述定义中,第1个参数是函数的名称;剩余的参数是一个或者多个序列;返回值是一个列表(Python 3以前)。在Python 3以后,map函数的返回值变成迭代器对象,通过list()函数可以把它转换为列表,也可以使用for循环进行迭代操作。
map函数的作用是以参数序列中的每个元素分别调用function函数,把每次调用后返回的结果保存到新的列表中。
示例如下:
func = lambda x:x+2
result = map(func, [1,2,3,4,5])
print(list(result))
在上述示例中,定义了匿名函数func,接着通过map函数把序列的每个元素取出来,作为参数调用func函数,然后把结果放到result列表中。
程序输出的结果为:
[3, 4, 5, 6, 7]
接下来,通过一张图来描述上述示例执行的原理,如图1所示。
图1 map函数原理图
当传入的函数需要两个参数的时候,同样需要传递两个列表。示例如下:
result = map(lambda x, y: x+y, [1, 2, 3], [4, 5, 6])
print(list(result))
运行代码,输出结果如下:
[5, 7, 9]
注意:
在Python 3以前,当传入的函数为None时,相当于合并参数为元组。示例(Python 2.7)如下:
result = map(None, [1, 3, 5, 7, 9], [2, 4, 6, 8, 10])
print(result)
运行代码,输出结果如下:
[(1, 2), (3, 4), (5, 6), (7, 8), (9, 10)]
如果两个序列的元素个数不一致,那么元素少的序列会以None补齐。示例(Python 2.7)如下:
result = map(None, [1, 3, 5, 7, 9], [2, 4, 6])
print(result)
运行代码,输出结果如下:
[(1, 2), (3, 4), (5, 6), (7, None), (9, None)]
在Python 3以后,当map传入的函数为None时,这等同于zip函数的功能,并且已经被zip函数取代了。另外,map函数无法处理两个序列长度不一致、对应位置操作数类型不一致的情况,它们都会报类型错误。
3.ord()函数
ord()函数用于返回字符在Unicode编码表中对应的码值,其参数是一个 字符。示例代码如下:
print(ord('a'))
print(ord('A'))
运行代码,结果如下所示:
97
65
4.chr()函数
chr()函数和ord()函数的功能相反,可根据码值返回相应的Unicode 字符,其参数是一个整数,取值范围为0~255。示例代码如下:
print(chr(97))
print(chr(65))
运行代码,结果如下所示:
a
A
5.filter()函数
filter函数会对指定序列执行过滤操作。
filter函数的定义如下:
filter(function or None, sequence) -> list, tuple, or string
在上述定义中,第1个参数可以是函数的名称或者None;第2个参数可以是序列、元组、字符串;返回值可以是序列(Python 3以后返回的是迭代器,同样要转换为序列)、元组或者字符串。其中,function只能接收一个参数,而且返回值是布尔值(True或False)。
示例如下:
func = lambda x:x%2
result = filter(func, [1, 2, 3, 4, 5])
print(list(result))
在上述示例中,定义了匿名函数func,接着通过filter函数把序列的每个元素取出来,作为参数调用func函数,然后把结果放到result列表中。
运行代码,输出结果如下:
[1, 3, 5]
filter函数的作用是,是以参数序列中的每个元素分别调用function函数,最后返回的结果包含调用结果为True的元素。为了让大家理解filter函数的作用,接下来,通过一张图来描述上述示例执行的原理,如图2所示。
图2 filter函数原理图
图2分析了上述程序执行的原理。由图可知,程序把原始序列的元素执行取余操作以后,将不能被2整除(结果为True)的元素筛选出来构成一个新的列表。
在filter函数中,返回值的类型跟sequence参数的类型必须相同。示例(Python 2.7中)如下:
>>> filter(None, "she")
she