在 Python 编程中,内置函数和高阶函数是提升代码效率与简洁性的重要工具。本文将结合实例,详细介绍常用内置函数(如 min
、max
、sum
等)和高阶函数(如 filter
、map
、reduce
等)的用法,帮助你快速掌握这些实用工具。
一、基础内置函数:简化日常操作
Python 提供了大量内置函数,无需额外导入即可直接使用,涵盖了数值计算、逻辑判断、对象操作等多个场景。
1. 数值计算相关函数
-
abs(x)
:返回数值的绝对值示例:
print(abs(-5)) # 输出:5
-
hex(x)
、bin(x)
、oct(x)
:分别将十进制数转换为十六进制、二进制、八进制字符串
示例:
python
print(hex(237)) # 输出:0xed(十六进制)
print(bin(8)) # 输出:0b1000(二进制)
print(oct(8)) # 输出:0o10(八进制)
-
divmod(a, b)
:返回元组(a // b, a % b)
,即商和余数示例:
print(divmod(8, 3)) # 输出:(2, 2)
-
pow(x, y)
:返回x
的y
次幂(等价于x ** y
)示例:
print(pow(2, 4)) # 输出:16
-
round(x, n)
:将x
四舍五入保留n
位小数示例:
print(round(5.567, 1)) # 输出:5.6
2. 逻辑判断相关函数
-
all(iterable)
:判断可迭代对象中所有元素是否为 "真"(非 0、非空、非None
等),全为真则返回True
,否则False
。示例:
print(all([1, 3, 'hello'])) # 输出:True
(所有元素均为真) -
any(iterable)
:判断可迭代对象中是否存在至少一个 "真" 元素,存在则返回True
,否则False
。示例:
print(any([None, 1, ''])) # 输出:True
(元素1
为真)
实际应用:
python
# 判断列表中是否全为偶数
def is_all_even(ls):
return all([item % 2 == 0 for item in ls])
ls = [1, 2, 3, 4]
print(is_all_even(ls)) # 输出:False(存在奇数 1、3)
# 判断字符串中是否包含字母
s = '123a'
print(any([ch.isalpha() for ch in s])) # 输出:True(包含字母 'a')
3. 对象操作相关函数
dir(obj)
:返回对象的属性和方法列表(无参数时返回当前模块的属性)。
示例:
python
ls = [1, 2, 3]
print(dir(ls)) # 输出列表的所有方法(如 append、pop 等)
print(dir()) # 输出当前模块的全局变量和函数
id(obj)
:返回对象的唯一标识符(内存地址),可用于判断两个变量是否指向同一对象。
示例:
python
ls1 = [1, 2, 3]
ls2 = [1, 2, 3]
print(ls1 == ls2) # 输出:True(值相等)
print(ls1 is ls2) # 输出:False(地址不同)
print(id(ls1), id(ls2)) # 输出两个不同的内存地址
callable(obj)
:判断对象是否可调用(如函数、类等)。
示例:
python
def test():
pass
print(callable(test)) # 输出:True(函数可调用)
print(callable(12)) # 输出:False(整数不可调用)
globals()
与 locals()
:分别返回全局变量字典和当前作用域的局部变量字典。
示例:
python
def test():
mm = 10
print(locals()) # 输出局部变量:{'mm': 10}
test()
print(globals()) # 输出全局变量(如函数 test、内置函数等)
4. 字符串执行函数
eval(str)
与 exec(str)
:将字符串作为 Python 代码执行,其中 eval
用于单行表达式并返回结果,exec
用于多行代码块(无返回值)。
示例:
python
# eval 执行表达式
s = '1 + 2 * 3 - 4'
print(eval(s)) # 输出:3(等价于执行 1+2*3-4)
# eval 执行简单语句
s = "print('你好')"
eval(s) # 输出:你好
# exec 执行多行代码
s = """
for i in range(5):
print(i)
"""
exec(s) # 输出:0 1 2 3 4(循环打印)
注意 :慎用 eval
和 exec
执行未知字符串,可能存在安全风险(如注入恶意代码)
二、高阶函数:提升代码抽象能力
高阶函数是指能接收函数作为参数或返回函数的函数,Python 内置的 filter
、map
、reduce
等是典型代表。
1. filter(func, iterable)
:过滤元素
- 功能:对可迭代对象
iterable
中的每个元素应用func
,保留func
返回True
的元素,返回一个迭代器。
示例:过滤列表中的偶数
python
ls = [1, 2, 3, 4, 5, 6]
even_filter = filter(lambda x: x % 2 == 0, ls)
print(list(even_filter)) # 输出:[2, 4, 6]
2. map(func, iterable)
:映射转换
- 功能:对可迭代对象
iterable
中的每个元素应用func
,返回包含转换后结果的迭代器。 - 示例:将列表中所有元素乘以 2
python
ls = [1, 2, 3, 4]
doubled = map(lambda x: x * 2, ls)
print(list(doubled)) # 输出:[2, 4, 6, 8]
3. reduce(func, iterable[, init])
:累积计算
- 功能:从左到右对可迭代对象
iterable
中的元素累积应用func
(需从functools
导入)。 - 参数:
func
接收两个参数(累计值res
和当前元素item
),init
为初始累计值(可选,默认用第一个元素作为初始值)。 - 示例:
python
from functools import reduce
ls = [1, 2, 3, 4, 5]
# 求和(初始值为 10)
total = reduce(lambda res, item: res + item, ls, 10)
print(total) # 输出:25(10 + 1+2+3+4+5)
# 求最大值
max_val = reduce(lambda res, item: res if res > item else item, ls)
print(max_val) # 输出:5
4. takewhile
与 dropwhile
(从 itertools
导入)
takewhile(func, iterable)
:保留可迭代对象中第一个不满足func
之前的所有元素。dropwhile(func, iterable)
:删除可迭代对象中第一个不满足func
之前的所有元素,保留剩余元素。
示例:
python
from itertools import takewhile, dropwhile
ls = [1, 3, 5, 2, 4, 6]
# 保留小于 4 的元素(直到遇到 5 停止)
print(list(takewhile(lambda x: x < 4, ls))) # 输出:[1, 3]
# 删除小于 4 的元素(直到遇到 5 开始保留)
print(list(dropwhile(lambda x: x < 4, ls))) # 输出:[5, 2, 4, 6]
三、总结
Python 的内置函数和高阶函数为开发者提供了强大的工具
建议在实际开发中多练习这些函数的组合使用(例如 filter
与 map
结合),逐步掌握其精髓。