内置函数(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'>

读法:从里往外——

  1. 最里:type("This is a string") 先算,返回 <class 'str'>
  2. 外层:这个返回值被当作 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”到”用得顺手”的关键一步。