97_Python常用内置函数大全

📅 2026/7/15 9:46:21
97_Python常用内置函数大全
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 循环却忽略了map、filter、zip等函数式编程工具。面试常见考点map和filter返回的是迭代器而非列表需要list()转换、zip的strict模式3.10、enumerate的start参数、sorted的key参数用法、all/any在表单校验中的实际应用。面试中经常让你现场用内置函数重写一段for循环代码考察你的Pythonic程度。本文将系统梳理 20 个高频内置函数按功能分类并通过丰富的代码示例展示最佳实践帮助你写出更 Pythonic 的代码。一、序列操作类map — 对序列每个元素执行函数map将函数映射到序列的每个元素上返回一个迭代器。一个常见的理解误区map并不是立即执行的它返回的是懒惰的迭代器只有当你消费它时如用list()包装或for循环遍历才会实际执行函数。如果你预期的是立即执行请记得用list()显式求值。# 将字符串列表转为整数values[1,2,3,4,5]numberslist(map(int,values))print(numbers)# [1, 2, 3, 4, 5]# 处理多个序列计算多个学生的平均分math_scores[85,92,78,90]eng_scores[88,89,82,95]averageslist(map(lambdam,e:(me)/2,math_scores,eng_scores))print(averages)# [86.5, 90.5, 80.0, 92.5]# 实战批量处理字符串names[ alIce , BOB,Charlie ]cleanedlist(map(str.strip,names))titledlist(map(str.title,cleaned))print(titled)# [Alice, Bob, Charlie]filter — 筛选符合条件的元素filter的第一个参数是判断函数返回True/False第二个参数是可迭代对象。如果第一个参数是Nonefilter会去掉所有 falsy 值0、None、空字符串、空列表等这是一个非常巧妙但容易被忽略的用法。和map一样filter返回的是懒惰迭代器。# 筛选偶数numbers[1,2,3,4,5,6,7,8,9,10]evenslist(filter(lambdax:x%20,numbers))print(evens)# [2, 4, 6, 8, 10]# 去掉空值和空字符串data[hello,,None,world,,python]cleanlist(filter(None,data))# None 作为过滤函数去掉 falsy 值print(clean)# [hello, world, python]# 实战筛选有效邮箱emails[alicetest.com,invalid,bobtest.com,]validlist(filter(lambdae:ineand.ine,emails))print(valid)# [alicetest.com, bobtest.com]zip — 并行迭代多个序列zip将多个可迭代对象拉链在一起同时遍历它们。到最短的可迭代对象耗尽时停止默认行为。Python 3.10引入的strictTrue参数让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,numberszip(*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,strictTrue))# ValueErrorexceptValueErrorase:print(f长度不一致{e})enumerate — 带索引的迭代fruits[苹果,香蕉,橘子,葡萄]# 自定义起始索引foridx,fruitinenumerate(fruits,start1):print(f第{idx}名{fruit})# 实战找列表中大于平均值的元素的位置scores[78,92,64,88,95,71]avgsum(scores)/len(scores)excellent[ifori,sinenumerate(scores)ifsavg]print(f高于平均分的索引{excellent})二、排序与比较类sorted — 对可迭代对象排序sorted返回一个新的已排序列表原可迭代对象不变。list.sort()是原地排序sorted()返回新列表——选择哪个取决于你是否需要保留原始顺序。key参数是sorted的灵魂——它接收一个函数对每个元素计算排序依据。面试中经常让你按列表中嵌套字典的某个字段排序考察的就是key参数的匿名函数用法。多级排序的实现也很巧妙keylambda x: (x[1], x[2])先按第一个字段排序相等时再按第二个字段排序。# 基础排序numbers[3,1,4,1,5,9,2,6]print(sorted(numbers,reverseTrue))# [9, 6, 5, 4, 3, 2, 1, 1]# 按自定义 key 排序students[{name:Alice,score:85},{name:Bob,score:92},{name:Charlie,score:78},]# 按分数排序rankedsorted(students,keylambdas:s[score],reverseTrue)forrinranked:print(f{r[name]}:{r[score]})# 多级排序先按年级再按姓名students2[(Alice,2,85),(Bob,1,92),(Charlie,2,78),(David,1,88),]resultsorted(students2,keylambdax:(x[1],x[2]))print(result)reversed — 反转迭代original[1,2,3,4,5]reversed_objreversed(original)print(list(reversed_obj))# [5, 4, 3, 2, 1]print(original)# [1, 2, 3, 4, 5]原列表不变# 注意反转列表用切片更快fasteroriginal[::-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]]totalsum(matrix,[])# [1, 2, 3, 4, 5, 6]all / any — 全真 / 有真判断# 检查所有元素是否为正数values[10,20,30]print(all(v0forvinvalues))# True# 检查是否包含偶数numbers[1,3,5,8,7]print(any(n%20forninnumbers))# 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 intprint(isinstance(42,int))# Trueprint(isinstance(True,int))# Truebool 是 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(keylambdax:x[0])print(pairs)# 作为回调defapply_operation(data,operation):returnlist(map(operation,data))resultapply_operation([1,2,3],lambdax:x**3)print(result)# [1, 8, 27]eval / exec — 动态执行代码# eval计算表达式返回结果expression2 3 * 4resulteval(expression)print(f{expression}{result})# 2 3 * 4 14# exec执行语句无返回值code def greet(name): return fHello, {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, 2passlen / 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,keylen))# kiwiprint(max(words,keylen))# strawberryany 实战数据验证工具defvalidate_record(record):综合使用内置函数进行数据记录验证required_fields[id,name,email]has_requiredall(finrecordforfinrequired_fields)is_valid_emailinrecord.get(email,)and.inrecord.get(email,)scoresrecord.get(scores,[])has_valid_scoresall(isinstance(s,(int,float))and0s100forsinscores)returnhas_requiredandis_valid_emailandhas_valid_scores record{id:1,name:Alice,email:alicetest.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 高级模块内置函数之外functoolspartial、reduce、cache和 itertoolsaccumulate、combinations、chain提供了更强大的函数式编程工具。