Python 内置函数及高阶函数实用指南:从基础到进阶

在 Python 编程中,内置函数和高阶函数是提升代码效率与简洁性的重要工具。本文将结合实例,详细介绍常用内置函数(如 minmaxsum 等)和高阶函数(如 filtermapreduce 等)的用法,帮助你快速掌握这些实用工具。

一、基础内置函数:简化日常操作

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) :返回 xy 次幂(等价于 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(循环打印)

注意 :慎用 evalexec 执行未知字符串,可能存在安全风险(如注入恶意代码)

二、高阶函数:提升代码抽象能力

高阶函数是指能接收函数作为参数或返回函数的函数,Python 内置的 filtermapreduce 等是典型代表。

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. takewhiledropwhile(从 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 的内置函数和高阶函数为开发者提供了强大的工具

建议在实际开发中多练习这些函数的组合使用(例如 filtermap 结合),逐步掌握其精髓。