Python 提供了 70 多个内置函数(built-in functions),它们不用 import 就能直接用。掌握它们,你能减少 50% 的手写循环代码。这一篇不是一个字典式的罗列,而是按用途分组——数值、序列、迭代、类型转换、面向对象、IO、反射——每类都举例说明什么时候用哪个。收藏本文,之后写代码前先来这里翻一下。
一、数值类
1 | abs(-5) # 5 绝对值 |
注意 round 的”银行家舍入”陷阱:round(0.5)、round(2.5)、round(4.5) 都朝偶数舍入。真正的”四舍五入”要用 decimal.Decimal 或者 math.floor(x + 0.5)。
min / max 也算数值类:
1 | min(3, 1, 4, 1, 5, 9, 2, 6) |
sum 只对数字:
1 | sum([1, 2, 3]) |
别用 sum 拼列表——性能巨差。用 itertools.chain 或 functools.reduce。
二、序列构造与转换
1 | list(iter) # 转列表 |
三、序列聚合
1 | len(seq) # 长度 |
any / all 常和生成表达式搭配:
1 | if any(x < 0 for x in nums): |
四、迭代辅助
1 | enumerate(seq, start=0) # 产生 (index, item) |
enumerate 常用
1 | for i, name in enumerate(names, start=1): |
zip 组合
1 | for a, b, c in zip(list_a, list_b, list_c): |
map 与 filter:现代 Python 更推荐推导式
1 | # map |
五、类型与检查
1 | type(x) # 返回类型对象 |
六、字符与编码
1 | ord("A") # 65 |
七、IO 与文件
1 | print(*objects, sep=' ', end='\n', file=sys.stdout, flush=False) |
open 一般搭配 with,见 with 语句与上下文管理器。
八、对象与反射
1 | getattr(obj, "name", default) # 取属性,可给默认 |
反射适合写”框架”代码,日常业务不用太深入。
getattr 的实用套路
1 | # 根据用户输入的操作名调用方法 |
九、动态执行
1 | eval("1 + 2") # 3 求值一个表达式 |
警告:eval / exec 危险——用户输入直接放进去等于给攻击者开后门。除非你完全控制输入且没有别的选择,否则不要用。
十、面向对象辅助
1 | object # 所有类的祖先 |
十一、迭代进阶:sorted/reversed/enumerate 深入
sorted 详解
1 | sorted(iter, key=None, reverse=False) |
reversed 只能对序列或实现 __reversed__ 的对象
1 | list(reversed([1, 2, 3])) # [3, 2, 1] |
十二、数学与工具(要 import 但很常用)
不是严格意义的内置函数,但用得跟内置一样多:
1 | import math |
十三、Python 3.10+ / 3.11+ 新增
1 | # 3.10:zip strict |
十四、”常见但不常见”的冷门内置
一些容易被遗忘但偶尔很好用的:
1 | memoryview(b"hello") # 零拷贝的内存视图 |
来自 operator 模块(虽然要 import,但极其常用):
1 | from operator import attrgetter, itemgetter |
这几乎是所有排序场景最快的写法,比 lambda 更快、更清晰。
十五、一个综合例子:数据集统计
1 | # stats.py |
十六、常见陷阱
round是银行家舍入:round(0.5) == 0。要传统四舍五入用decimal。sum别用来拼字符串:sum(strings, "")报错,也慢。用"".join。filter/map返回迭代器:filter(...)结果需要list()转才能反复用。sorted与sort:一个返回新列表,一个就地。前者接受任何可迭代,后者只在 list 上有。any([])是 False,all([])是 True:空的”全部为真”是”空真”(vacuous truth)。eval别接用户输入:安全事故大坑。hash(-1)是 -2:CPython 实现细节,-1被用作错误信号。isinstance(True, int)是 True:bool 是 int 的子类。
十七、小结与延伸阅读
- Python 内置函数约 70 个,日常写代码高频用到的不到 30 个;
- 数值类:
abs / sum / min / max / round / pow / divmod; - 序列构造:
list / tuple / set / dict / str; - 序列聚合:
sorted / reversed / any / all / len; - 迭代:
enumerate / zip / map / filter / range; - 类型/反射:
isinstance / type / getattr / setattr / hasattr; - 从
operator引入itemgetter / attrgetter加速排序; - 有困惑先
help(内置函数)或dir()看看再上网搜。
延伸阅读:
- 内置函数官方目录:https://docs.python.org/zh-cn/3/library/functions.html
- operator 模块:https://docs.python.org/zh-cn/3/library/operator.html
到这里模块二(数据结构)8 篇结束! 下一篇我们进入 模块三:函数与模块,从 函数定义与调用 开始。