1. 内置函数是什么? #
- Python 内置函数(built-in functions) 由解释器直接提供,无需
import 即可调用,如 len、print、sorted。
- 它们多用 C 实现,性能通常优于手写等价循环,语法也更简洁。
- 与标准库模块(
json、os 等)不同,内置函数数量不多,但使用频率极高,应熟记常用的一批。
- 本章按项目里常见场景分组:类型转换、序列统计与排序、迭代辅助、
map/filter、类型判断、简单数学与输出。
2. 类型转换 #
- HTTP 参数、表单、JSON 里读到的数字往往是字符串,计算或入库前需转成
int、float。
- 展示或拼接又要
str()。
bool() 把值转为布尔:0、空字符串、空列表等为 False,非空容器、非零数为 True。
- 容器之间可互转:
list()、tuple()、set()(去重)、dict()(键值对序列)等。
- 转换失败会抛异常(如
int("abc")),接口层应校验或 try/except。
int("123")
float("3.14")
str(456)
bool(0)
list("hello")
tuple([1, 2, 3])
set([1, 2, 2, 3])
dict([("a", 1), ("b", 2)])
3. 序列统计与排序 #
- 处理列表、分数、查询结果时,常用内置函数做长度、求和、最值、排序、逻辑判断。
len 得元素个数;sum 对数字可迭代对象求和;max/min 可取序列最值,也可 max(a, b) 比较多个值。
sorted() 返回新列表,不修改原序列,可传 key= 按字段排序、reverse=True 降序。
- 原地排序仍用列表的
.sort()。
any 表示是否至少一个为真;all 表示是否全部为真,常配合生成器表达式做批量校验(如是否全部及格)。
| 函数 |
作用 |
示例 |
len(x) |
长度 |
len([1, 2, 3]) → 3 |
sum(iterable) |
求和 |
sum([80, 90, 75]) |
max / min |
最值 |
max(scores)、min(a, b) |
sorted(x, key=..., reverse=...) |
返回新排序列表 |
见下方 |
any / all |
任一/全部为真 |
all(s >= 60 for s in scores) |
users = [
{"name": "Alice", "score": 85},
{"name": "Bob", "score": 92},
]
users_sorted = sorted(users, key=lambda u: u["score"], reverse=True)
4. 迭代相关 #
- 下列内置函数常与
for 循环配合(详见 for 循环章节)。
range 生成整数序列,控制循环次数或下标。
enumerate 同时产出索引与元素;zip 把多个序列按位置配对。
- 它们本身返回可迭代对象,用在
for ... in ... 里即可。
for i in range(0, 10, 2):
print(i)
items = ["apple", "banana", "cherry"]
for i, item in enumerate(items):
print(i, item)
names = ["Alice", "Bob", "Charlie"]
scores = [85, 90, 95]
for name, score in zip(names, scores):
print(f"{name}: {score}")
5. map 与 filter #
map(func, iterable) 对序列逐项应用函数,得到迭代器。
filter(func, iterable) 保留使 func 为真的项;需要列表时包一层 list(...)。
- 二者与
lambda 搭配很常见,但 Python 项目里简单映射、过滤更推荐列表推导式,可读性往往更好。
map/filter 在需要惰性迭代、或逻辑已封装成命名函数时仍有用。
nums = [1, 2, 3, 4, 5]
print(list(map(lambda x: x * 2, nums)))
print(list(filter(lambda x: x % 2 == 0, nums)))
nums = [1, 2, 3, 4, 5, 6]
doubled = [x * 2 for x in nums]
even_nums = [x for x in nums if x % 2 == 0]
print("Doubled:", doubled)
print("Even numbers:", even_nums)
6. 类型判断 #
type(obj) 返回对象的精确类型,多用于调试。
isinstance(obj, 类型) 判断是否为某类型(或类型元组中的任一种),子类实例也会返回 True。
- 校验 API 入参、解析 JSON 时优先用
isinstance,而不是 type(x) == list(子类列表会漏判)。
type("hello")
isinstance(5, int)
isinstance(5, (int, float))
7. 常用数学与输出 #
abs(x) 取绝对值;round(x, n) 四舍五入,n 为小数位数,金额、统计展示时常用。
print(*objects, sep=..., end=...) 输出到控制台:sep 分隔多个参数,end 控制行尾(默认换行)。
- 脚本和本地调试可用
print;生产业务更推荐日志模块(logging),便于级别、格式与落盘。
print(abs(-5))
print(round(3.14159, 2))
print("a", "b", sep=", ", end="\n")
8. 项目开发要点 #
- 熟记内置函数能减少重复造轮子,并写出更地道的 Python。
- 优先内置函数:
sum、max、sorted 比手写循环更清晰、往往更快。
sorted(..., key=...):字典列表、ORM 结果按字段排序时必备。
- 类型转换要带异常:
int(user_input) 可能 ValueError,接口层要校验。
- 过滤/映射:简单用列表推导式;
map/filter 在可读性相当或需要惰性迭代时再用。
any / all:配合生成器表达式做批量校验(是否全部及格、是否存在非法项)。
isinstance 做类型检查,不要只靠 type(x) == list(子类会漏判)。
- 生产环境少靠
print 排错,用日志模块;print 适合脚本和本地调试。
9. 总结 #
- 内置函数覆盖类型转换、序列处理、迭代辅助与简单判断,多数无需 import。
- 日常以
sorted + key、isinstance、推导式优先于 map/filter 最为实用。
- 下表按分类速查。
| 分类 |
常用函数 |
| 类型转换 |
int, float, str, bool, list, dict, set |
| 序列 |
len, sum, max, min, sorted, any, all |
| 迭代 |
range, enumerate, zip |
| 映射过滤 |
map, filter(或推导式) |
| 类型 |
isinstance, type |
| 其他 |
abs, round, print |