97_Python常用内置函数大全
2026/7/15 9:46:07 网站建设 项目流程

Python常用内置函数大全

文章目录

  • Python常用内置函数大全
    • 前言
    • 一、序列操作类
      • map — 对序列每个元素执行函数
      • filter — 筛选符合条件的元素
      • zip — 并行迭代多个序列
      • enumerate — 带索引的迭代
    • 二、排序与比较类
      • sorted — 对可迭代对象排序
      • reversed — 反转迭代
    • 三、聚合计算类
      • sum — 求和
      • all / any — 全真 / 有真判断
    • 四、对象操作类
      • type / isinstance — 类型检查
      • dir — 查看对象属性和方法
      • id / hash — 对象标识与哈希
    • 五、函数式编程类
      • lambda — 匿名函数
      • eval / exec — 动态执行代码
    • 六、可迭代对象工具
      • range — 生成数字序列
      • len / min / max — 长度与极值
      • any 实战:数据验证工具
    • 总结
    • 亮点总结
    • 适用场景
    • 扩展方向

前言

Python 内置函数是解释器自带的"开箱即用"工具集,不需要任何 import 即可使用。熟练运用内置函数不仅能减少代码量,还能利用其 C 语言实现的底层优势提升性能。然而,许多初学者习惯写冗长的 for 循环,却忽略了mapfilterzip等函数式编程工具。

面试常见考点mapfilter返回的是迭代器而非列表(需要list()转换)、zipstrict模式(3.10+)、enumeratestart参数、sortedkey参数用法、all/any在表单校验中的实际应用。面试中经常让你现场用内置函数重写一段for循环代码,考察你的Pythonic程度。本文将系统梳理 20+ 个高频内置函数,按功能分类并通过丰富的代码示例展示最佳实践,帮助你写出更 Pythonic 的代码。

一、序列操作类

map — 对序列每个元素执行函数

map将函数"映射"到序列的每个元素上,返回一个迭代器。一个常见的理解误区map并不是立即执行的,它返回的是懒惰的迭代器,只有当你消费它时(如用list()包装或for循环遍历)才会实际执行函数。如果你预期的是立即执行,请记得用list()显式求值。

# 将字符串列表转为整数values=["1","2","3","4","5"]numbers=list(map(int,values))print(numbers)# [1, 2, 3, 4, 5]# 处理多个序列:计算多个学生的平均分math_scores=[85,92,78,90]eng_scores=[88,89,82,95]averages=list(map(lambdam,e:(m+e)/2,math_scores,eng_scores))print(averages)# [86.5, 90.5, 80.0, 92.5]# 实战:批量处理字符串names=[" alIce "," BOB","Charlie "]cleaned=list(map(str.strip,names))titled=list(map(str.title,cleaned))print(titled)# ['Alice', 'Bob', 'Charlie']

filter — 筛选符合条件的元素

filter的第一个参数是判断函数(返回True/False),第二个参数是可迭代对象。如果第一个参数是Nonefilter会去掉所有 falsy 值(0None、空字符串、空列表等),这是一个非常巧妙但容易被忽略的用法。和map一样,filter返回的是懒惰迭代器。

# 筛选偶数numbers=[1,2,3,4,5,6,7,8,9,10]evens=list(filter(lambdax:x%2==0,numbers))print(evens)# [2, 4, 6, 8, 10]# 去掉空值和空字符串data=["hello","",None,"world","","python"]clean=list(filter(None,data))# None 作为过滤函数,去掉 falsy 值print(clean)# ['hello', 'world', 'python']# 实战:筛选有效邮箱emails=["alice@test.com","invalid","bob@test.com",""]valid=list(filter(lambdae:"@"ineand"."ine,emails))print(valid)# ['alice@test.com', 'bob@test.com']

zip — 并行迭代多个序列

zip将多个可迭代对象"拉链"在一起,同时遍历它们。到最短的可迭代对象耗尽时停止(默认行为)。Python 3.10引入的strict=True参数让zip在长度不一致时抛出ValueError,这在实际开发中非常有用——在此之前,长度不一致导致的静默数据截断是一个难以发现的Bug来源。

# 基础用法names=["张三","李四","王五"]ages=[25,30,28]cities=["北京","上海","深圳"]forname,age,cityinzip(names,ages,cities):print(f"{name}{age}岁,来自{city}")# 解压 zip 对象pairs=[("a",1),("b",2),("c",3)]letters,numbers=zip(*pairs)print(letters)# ('a', 'b', 'c')print(numbers)# (1, 2, 3)# strict 模式(3.10+):长度不一致时抛异常a=[1,2,3]b=[4,5]try:list(zip(a,b,strict=True))# ValueErrorexceptValueErrorase:print(f"长度不一致:{e}")

enumerate — 带索引的迭代

fruits=["苹果","香蕉","橘子","葡萄"]# 自定义起始索引foridx,fruitinenumerate(fruits,start=1):print(f"第{idx}名:{fruit}")# 实战:找列表中大于平均值的元素的位置scores=[78,92,64,88,95,71]avg=sum(scores)/len(scores)excellent=[ifori,sinenumerate(scores)ifs>avg]print(f"高于平均分的索引:{excellent}")

二、排序与比较类

sorted — 对可迭代对象排序

sorted返回一个新的已排序列表,原可迭代对象不变。list.sort()是原地排序,sorted()返回新列表——选择哪个取决于你是否需要保留原始顺序。key参数是sorted的灵魂——它接收一个函数对每个元素计算"排序依据"。面试中经常让你"按列表中嵌套字典的某个字段排序",考察的就是key参数的匿名函数用法。多级排序的实现也很巧妙:key=lambda x: (x[1], x[2])先按第一个字段排序,相等时再按第二个字段排序。

# 基础排序numbers=[3,1,4,1,5,9,2,6]print(sorted(numbers,reverse=True))# [9, 6, 5, 4, 3, 2, 1, 1]# 按自定义 key 排序students=[{"name":"Alice","score":85},{"name":"Bob","score":92},{"name":"Charlie","score":78},]# 按分数排序ranked=sorted(students,key=lambdas:s["score"],reverse=True)forrinranked:print(f"{r['name']}:{r['score']}")# 多级排序:先按年级,再按姓名students2=[("Alice",2,85),("Bob",1,92),("Charlie",2,78),("David",1,88),]result=sorted(students2,key=lambdax:(x[1],x[2]))print(result)

reversed — 反转迭代

original=[1,2,3,4,5]reversed_obj=reversed(original)print(list(reversed_obj))# [5, 4, 3, 2, 1]print(original)# [1, 2, 3, 4, 5],原列表不变# 注意:反转列表用切片更快faster=original[::-1]# 也是 [5, 4, 3, 2, 1]

三、聚合计算类

sum — 求和

numbers=[1,2,3,4,5]# 带初始值print(sum(numbers,100))# 115# 二维列表"展平求和"matrix=[[1,2],[3,4],[5,6]]total=sum(matrix,[])# [1, 2, 3, 4, 5, 6]

all / any — 全真 / 有真判断

# 检查所有元素是否为正数values=[10,20,30]print(all(v>0forvinvalues))# True# 检查是否包含偶数numbers=[1,3,5,8,7]print(any(n%2==0forninnumbers))# True# 实战:表单校验defvalidate_form(data):checks=[all(fieldforfieldindata.values()),# 没有空值any(c.isupper()forcindata["password"]),# 包含大写字母any(c.isdigit()forcindata["password"]),# 包含数字len(data["password"])>=8,# 长度足够]returnall(checks)

四、对象操作类

type / isinstance — 类型检查

print(type(42))# <class 'int'>print(isinstance(42,int))# Trueprint(isinstance(True,int))# True,bool 是 int 的子类# isinstance 支持元组多类型检查defprocess(data):ifisinstance(data,(list,tuple)):returnlen(data)elifisinstance(data,dict):returnlen(data.keys())

dir — 查看对象属性和方法

# 查看字符串的所有方法print(dir(""))# 查看模块内容importosprint([namefornameindir(os)ifnotname.startswith("_")][:10])

id / hash — 对象标识与哈希

a=[1,2,3]b=[1,2,3]print(id(a)==id(b))# False,不同对象print(aisb)# False# 可变对象不可哈希try:hash(a)exceptTypeError:print("列表不可哈希,不能作为字典键")

五、函数式编程类

lambda — 匿名函数

lambda是一个一次性的小型函数,常用于sorted(key=...)map()filter()等需要传入函数但函数逻辑很简单的场景。使用lambda的金规则:如果函数体超过一行(即一个表达式),就应该定义为具名函数def。过度使用lambda会让代码变得难以阅读——匿名函数的意图不如具名函数明确,而名字本身就是文档。

# 作为 key 参数pairs=[(2,"two"),(1,"one"),(3,"three")]pairs.sort(key=lambdax:x[0])print(pairs)# 作为回调defapply_operation(data,operation):returnlist(map(operation,data))result=apply_operation([1,2,3],lambdax:x**3)print(result)# [1, 8, 27]

eval / exec — 动态执行代码

# eval:计算表达式,返回结果expression="2 + 3 * 4"result=eval(expression)print(f"{expression}={result}")# 2 + 3 * 4 = 14# exec:执行语句,无返回值code=""" def greet(name): return f"Hello, {name}!" """exec(code)print(greet("World"))# Hello, World!# 安全警告:不要对不可信输入使用 eval/exec

六、可迭代对象工具

range — 生成数字序列

foriinrange(5):# 0-4passforiinrange(2,6):# 2-5passforiinrange(10,0,-2):# 10, 8, 6, 4, 2pass

len / min / max — 长度与极值

data=[15,42,7,23,91]print(len(data))# 5print(min(data))# 7print(max(data))# 91# 使用 key 参数words=["apple","banana","kiwi","strawberry"]print(min(words,key=len))# kiwiprint(max(words,key=len))# strawberry

any 实战:数据验证工具

defvalidate_record(record):"""综合使用内置函数进行数据记录验证"""required_fields=["id","name","email"]has_required=all(finrecordforfinrequired_fields)is_valid_email="@"inrecord.get("email","")and"."inrecord.get("email","")scores=record.get("scores",[])has_valid_scores=all(isinstance(s,(int,float))and0<=s<=100forsinscores)returnhas_requiredandis_valid_emailandhas_valid_scores record={"id":1,"name":"Alice","email":"alice@test.com","scores":[85,92,78]}print(validate_record(record))# True

总结

本文按照功能分类介绍了 20+ 个 Python 常用内置函数,覆盖了序列操作(map/filter/zip/enumerate/reversed)、排序(sorted)、聚合(sum/all/any)、对象操作函数式编程等多个类别。使用这些内置函数的核心原则是:优先用内置函数替代手写循环。它们不仅代码更简洁,性能通常也更优。建议读者在编写日常代码时有意识地使用这些函数,逐步培养 Pythonic 的编程风格。

亮点总结

  • 分六类系统梳理 20+ 内置函数:序列操作、排序与比较、聚合计算、对象操作、函数式编程和可迭代对象工具,结构清晰,方便速查。
  • 实战案例贯穿:从表单校验(all/any 组合)、批量字符串处理(map)、标签交集计算(filter)到排行榜排序(sorted + key),每个函数都结合真实应用场景。
  • Pythonic 思维培养:强调"优先用内置函数替代手写循环",用 map 代替 for 循环、用 all 代替多行判断,代码量减少 50% 以上。
  • 常见陷阱提示:如 filter(None) 过滤 falsy 值的巧用、zip strict 模式避免数据截断、eval/exec 的安全警告等。

适用场景

  • 日常编码效率提升:用 enumerate 代替 range(len(…)),用 zip 同时迭代多个列表,用 sorted 的 key 参数定制排序规则,减少样板代码。
  • 数据清洗与处理:map 批量转换数据类型,filter 筛选有效数据,all/any 快速校验数据质量,sum 配合生成器实现内存友好的聚合。
  • 代码重构与优化:将冗长的 for 循环改为内置函数 + lambda 的组合,提升代码可读性和执行性能。

扩展方向

  • Python 性能优化技巧(本系列第 96 篇):理解内置函数的 C 语言实现优势,结合缓存和数据结构选择,进一步挖掘性能潜力。
  • Python 代码规范与风格指南(本系列第 89 篇):将内置函数的 Pythonic 使用习惯融入团队规范,统一编码风格。
  • functools 与 itertools 高级模块:内置函数之外,functools(partial、reduce、cache)和 itertools(accumulate、combinations、chain)提供了更强大的函数式编程工具。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询