内置函数(built-in functions)就是 Python 自带、不用 import 直接能用的函数。 上一篇讲了怎么自己写函数,这一篇讲怎么白用官方已经写好的。
print() 和 type() 已经在数据类型篇的配套工具一节讲过了,这里聚焦三个新的:max() / min() / sorted(),再加一个让代码更紧凑的技巧——函数嵌套。
先看全景:这一篇要用的 3+2 个函数
| 函数 | 干啥 | 一句话用法 |
|---|---|---|
max() | 找最大值 | max([12, 2, 57]) → 57 |
min() | 找最小值 | min([12, 2, 57]) → 2 |
sorted() | 排序(默认升序) | sorted([12, 2, 57]) → [2, 12, 57] |
print() | 输出到屏幕 | 已讲 |
type() | 查数据类型 | 已讲 |
max() 和 min() —— 找最大/最小
接收两种参数形式:多个值 或 一个可迭代对象(比如列表):
# 多个值
max(12, 2, 57) # → 57
min(12, 2, 57) # → 2
# 一个列表(更常见)
time_list = [12, 2, 32, 19, 57, 22, 14] # 某用户一周 7 次登录时长(分钟)
print(min(time_list)) # → 2 最短一次
print(max(time_list)) # → 57 最长一次安全场景:一周登录时长里最长的会话?可能是用户忘登出、也可能是会话劫持。最短的批量短会话?可能是脚本扫描。
max/min是从一堆数据里快速找极端值的最快办法,比写 for 循环 自己比省事多了。
sorted() —— 给可迭代对象排序
接收一个可迭代对象(列表、字符串等),返回一个排好序的新列表:
time_list = [12, 2, 32, 19, 57, 22, 14]
print(sorted(time_list)) # → [2, 12, 14, 19, 22, 32, 57]默认升序(从小到大)。字符串按字母序排。
坑 1:sorted() 不会改原列表
它返回一个新列表,不动原数据:
time_list = [12, 2, 32, 19, 57, 22, 14]
print(sorted(time_list)) # → [2, 12, 14, 19, 22, 32, 57]
print(time_list) # → [12, 2, 32, 19, 57, 22, 14] 原列表没动!新手常踩:以为 sorted(time_list) 后,time_list 自己就排好了。不会。要想留着排序结果,得赋给一个新变量:
sorted_list = sorted(time_list)这其实是好事——原数据保留,不会被悄悄改掉。函数应该”不留痕迹”,和上一篇”别动全局变量”是同一精神。
坑 2:不能混类型
sorted() 不能处理”既有数字又有字符串”的列表:
sorted([1, 2, "hello"]) # ❌ 报错:不同类型不能比大小安全脚本里这种 bug 很常见:从日志解析出的数据,默认是字符串,你以为是数字混进数字一起排——直接崩。排序前先用 type() 确认类型统一。
函数嵌套:一个函数的输出直接喂给另一个函数
这是个让代码更紧凑的关键技巧。看这一行:
print(type("This is a string")) # → <class 'str'>读法:从里往外——
- 最里:
type("This is a string")先算,返回<class 'str'> - 外层:这个返回值被当作
print()的参数,打印出来
也就是说,一个函数的返回值,可以直接当另一个函数的实参传进去,不需要中间变量。等价于:
result = type("This is a string")
print(result)省了一行,也省了一个临时变量。安全脚本里很常见:
print(max(time_list)) # 找最大 → 直接打印
print(sorted(suspicious_ips)) # 排序可疑 IP → 直接打印
print(len([x for x in logs if "fail" in x])) # 算失败次数 → 直接打印提醒:嵌套别套太深。
print(sorted(set(map(int, line.split(",")))))这种四层嵌套读起来费劲,拆成几行更清楚。可读性 > 行数。
在安全场景里串起来
把这些拼起来,一段”一周登录时长统计”就是这样:
time_list = [12, 2, 32, 19, 57, 22, 14] # 某用户一周登录时长(分钟)
print("登录次数:", len(time_list)) # len 也是内置函数
print("最短:", min(time_list), "分钟")
print("最长:", max(time_list), "分钟")
print("按时长排序:", sorted(time_list))
if max(time_list) > 480: # 单次超 8 小时
print("⚠️ 异常长会话,检查是否会话劫持")短短几行,基本统计 + 异常判断都齐了——这就是内置函数的杠杆:会用的人比从头造轮子的人快十倍。
延伸:Python 还有几十个内置函数
len()、sum()、abs()、round()、int()、str()、list()、range()(已在循环篇讲过)、input()……完整列表查官方文档 Built-in Functions。
但日常脚本 80% 的活,前面提的这几个就够用了。
一句话总结
max / min 找极端值,sorted 排序但不动原列表、不能混类型。把一个函数的输出直接传给另一个函数(print(type(x)))能让代码更紧凑。会白嫖内置函数,是从”会写 Python”到”用得顺手”的关键一步。