恒美微站 Logo 恒美微站
  • 首页
  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心
  • 联系我们

Python内置函数大全:从类型转换到迭代操作的高效用法

  • 首页
  • 资讯中心
  • /
  • Python内置函数大全:从类型转换到迭代操作的高效用法

相关资讯

Spring Boot+Vue微信小程序购物系统:从搭建到答辩全流程指南 2026/10/9 17:59:12
小红书风控状态码大揭秘:xiaohongshu-skills 如何诊断 404/461/403/999 2026/10/9 17:59:12
导引头不是传感器,而是弹载智能感知中枢 2026/10/9 17:59:12

最新资讯

PC-lint Plus从安装到落地:配置、集成与告警门禁实践
组态王KVADODBGrid日期查询避坑:从SQL写法到连接配置全解析
【全网首发!】让你的 QQ 和微信个人小号秒变 AI 助手 — OpenClaw IM Manager 开源实战
手把手教你部署 OpenClaw:从 NodeJS 到 Swift/Kotlin 的多语言接入实践
矩阵运算内存占用计算:从原理到实战的完整指南
YOLO实战:植物气孔开闭检测数据集构建与训练全流程

今日推荐

AI编程智能体实战:从写代码到指挥代码的架构与落地
多模态大模型全栈能力拆解:从数据对齐到弹性推理
大模型Agent开发入门:从工具调用循环到落地避坑指南

本周热门

MR25H40CDF + PIC18F65K40:工业记录仪高可靠存储实战
基于STM32的数控恒压恒流电源设计:从硬件到PID调参全解析
LT9211 MIPI重定时器原理与双路扇出实战指南

本月精选

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证
2026 大模型集体涨价:用 Python 做企业 Token 成本测算与选型避坑(附配置)

Python内置函数大全:从类型转换到迭代操作的高效用法

发布时间:2026/10/9 17:59:12
Python内置函数大全:从类型转换到迭代操作的高效用法 我在社区答疑时最常看到的Python新手问题其实不是语法报错而是明明有内置函数可以用硬是手动写了一大堆循环。比如统计列表里每个元素出现几次有人能写十行代码而高手一句Counter或者更基础的dict.get就完事。这里面最值得先吃透的就是Python那一组不需要import、随时可用的built-in函数。这篇文章就围绕python 内置函数大全这个话题把那些官方文档里列出来、但很少被系统讲透的函数按用途拆开讲。我不会一行行念文档而是挑出日常开发里真正高频、真正容易踩坑的那批讲清楚它们的用法、适用场景、以及为什么推荐你优先用它而不是自己造轮子。适合的人群是刚学完Python基础语法、准备进阶的读者以及写了一段时间代码但基本没主动用过内置函数的开发者。1. 先看清全貌内置函数到底解决什么问题1.1 内置函数的本质语言自带的那批标准零件先说一个基本概念。内置函数就是Python解释器启动后不需要import任何模块、随时可以直接调用的函数。官方文档里有一个专门的章节叫Built-in Functions数量在Python 3.8之后稳定在70个左右不同版本稍有出入。这70个函数看着不多但你要是真的逐条读一遍官方文档会发现很多函数的工作方式你从来没细想过。打个比方Python就像一间装修好的厨房内置函数是橱柜里自带的那套基础厨具——锅、铲、刀、砧板都在手边。很多人学完Python只记住了print和len对其他工具视而不见遇到需求就自己找木板钉一个工具出来。而老手的第一反应永远是先看看橱柜里有没有现成的。这种先查内置、再想import、最后才是自己写的优先级其实就是Python社区常说的Pythonic风格的起点。因为内置函数是用C语言实现的执行效率比你自己写的纯Python循环高一个量级而且它们经过了无数人的验证边界情况处理得比我们能想到的周全得多。1.2 70个函数先分类再逐个击破官方文档的排序是字母序阅读体验很差——all和any挨着abs和ascii你先干瞪眼。我自己习惯把它们按用途分成六大类方便记忆和检索分类代表函数解决什么问题数据类型转换int()float()str()bool()list()dict()set()tuple()bytes()把数据从一种类型变成另一种类型数值与数学运算abs()divmod()round()pow()sum()min()max()数值计算、取整、比较聚合序列与迭代操作len()range()enumerate()zip()sorted()reversed()filter()map()slice()遍历、排序、筛选、变换对象与属性访问getattr()setattr()hasattr()delattr()type()isinstance()callable()id()hash()动态查看/操作对象属性逻辑判定与聚合all()any()对一组布尔结果做合并判断动态执行与其他eval()exec()compile()format()ord()chr()字符串当代码执行、字符编码互换、格式化有了这张地图你再去看官方文档就不慌。下面几章我按这个分类逻辑把每个类里真正干活时常用的函数讲透。2. 最常用的一组数据转换与数值运算2.1 类型转换四兄弟int、float、str、bool类型转换是日常写代码最高频的操作没有之一。int(x)能把一个表示数字的字符串转成整数也能把浮点数的小数部分直接抹掉float(x)负责转浮点数str(x)把任何对象变成字符串bool(x)则拿去做真值判断。这里有个新手必踩的坑bool(False)的结果是True不是False。因为bool()判断的是这个对象是否为空非空字符串一律是真。你要是想按字符串内容判断得这样写flag False # 错误示范 print(bool(flag)) # True坑死了 # 正确做法 print(flag True) # 按内容判断int()还有一个很多教程不会细讲的参数base。int(ff, 16)能得到255int(1010, 2)能得到10。这个在做进制转换解析时特别好用比如解析二进制协议头或者十六进制颜色值时一行代码就搞定。str()则需要注意它和repr()的区别。str()是把对象变成给人看的字符串repr()是变成解释器能还原的字符串。调试的时候用repr()看数据能看到字符串的引号和转义不会把空格和换行弄丢。2.2 数值运算三件套abs、divmod、roundabs()就是求绝对值没啥好说的。我想重点聊聊divmod()和round()。divmod(a, b)一次性返回(a // b, a % b)就是商和余数。什么时候用典型场景是分页。你要把100条数据每页8条想知道有多少页和最后一页剩几条一行搞定pages, tail divmod(100, 8) print(pages, tail) # 12 4共13页末页4条以后看到有人写了先//再%两行代码你就可以默默换成divmod干净利落。这类组合函数的意义不只是少写一行而是明确传达我要做的是分页/分组这个语义让读代码的人秒懂。round()则是经典的陷阱函数。很多人以为round(2.675, 2)会得到2.68实际结果是2.67。原因不是函数bug而是浮点数在内存里的表示精度问题。更要命的是Python的round()采用银行家舍入规则遇到正好一半的情况会舍入到最近的偶数。比如round(0.5)是0round(1.5)是2。如果你做的是金融计算、业务统计这个行为可能和预期不符。我建议需要严格舍入时别依赖round()用Python的decimal模块用Decimal类型配合ROUND_HALF_UP才能得到小学数学教的那种四舍五入。2.3 聚合函数三巨头sum、min、max这三个函数看起来简单到不需要讲但它们的进阶用法值得记一笔。sum(iterable)只做加法不它可以处理列表、元组、生成器还有第二个参数start。sum([1, 2, 3], start10)结果是16。有人用sum来拼接列表sum([[1], [2]], [])能得到[1, 2]。但我不推荐这么干因为效率很低拼接大量列表时应该用itertools.chain。min()和max()最有价值的是它们的key参数。它允许你指定按什么标准来比较大小。比如从一堆字典里找出价格最贵的那个商品products [{name: A, price: 10}, {name: B, price: 99}, {name: C, price: 20}] best max(products, keylambda p: p[price]) print(best[name]) # B同样的逻辑还能用在找绝对值最大、找字符串最长、按某个属性取极值等场景。这个key参数设计是Python把比较规则和遍历逻辑解耦的典型体现。3. 容器与序列操作别再用for循环干苦力了3.1 容器构造函数的隐藏用法list()、tuple()、dict()、set()平时被当成空容器构造函数用但它们的真正身份其实是类型转换/复制工厂。list(hello)会得到[h, e, l, l, o]把字符串拆成字符列表这比写for循环硬拆快得多。tuple同理。set([1, 2, 2, 3])顺手去重。dict()可以接受关键字参数dict(a1, b2)也可以接收一个装着二元组的列表dict([(a, 1), (b, 2)])这在从其他数据源转成字典时非常方便。有个细节dict()在Python 3.7之后保证保持插入顺序所以如果你需要先来后到的映射关系直接用普通字典就行不需要惦记OrderedDict了除非要做兼容老版本。3.2 迭代组合拳enumerate、zip、sorted、reversed、filter、map这几个函数放在一起讲因为它们经常被组合使用是不用for循环也能遍历的核心主力。enumerate(iterable, start0)在遍历时同时拿到索引和值替代手写range(len(x))那种老土写法。zip(*iterables)把多个可迭代对象拉链式并排组合比如把两个列表按位置配对成元组列表。还能用来解包转置多维列表list(zip(*matrix))就是矩阵转置一行搞定。这个技巧我在处理表格数据时经常用。sorted(iterable, *, keyNone, reverseFalse)最厉害的点是它不修改原始数据而是返回一个新的排序列表还能搭配key做各种花式排序。比如按元组第二个元素排序sorted(pairs, keylambda x: x[1])。reversed(seq)返回反向迭代器占用的不是复制出来的列表而是原对象的反向视图省内存。filter(func_or_None, iterable)做条件筛选。第一个参数传函数筛选出函数返回真值的元素传None时自动过滤掉所有假值0、空字符串、空列表、None、False。比如list(filter(None, [0, 1, , x]))得到[1, x]。map(func, *iterables)对每个元素执行函数返回一个迭代器。配合lambda能完成批量转换比如list(map(str, [1, 2, 3]))得到[1, 2, 3]。这六个函数组合起来能完成绝大多数遍历-筛选-变换-排序的工作。它们都返回迭代器或特殊视图实实在在处理了大量数据时内存占用远小于中间生成一堆临时列表。3.3 逻辑判定all、any、len 的使用技巧all(iterable)和any(iterable)分别对应所有为真和存在为真。它们接受一个可迭代对象内部帮你做短路求值——all一旦遇到False立刻返回any一旦遇到True立刻返回不会傻乎乎遍历完整个列表。实际使用中它们可以把多行条件判断压缩成一行。比如判断一组分数是否都及格、一个购物车列表里是否有价格超过500的商品scores [60, 80, 55, 90] print(all(s 60 for s in scores)) # False cart [100, 200, 600] print(any(p 500 for p in cart)) # Truelen(x)这个用得太多但有一个冷知识点它只对带有__len__方法的序列类型有效对range、字典、集合也都有效。判断列表是否为空时比len(x) 0更地道的写法是直接if x:因为空列表本身就是假值。能不用len判断就尽量不用更简洁。4. 对象与属性操作写框架和处理动态对象要靠它们4.1 属性访问四件套getattr、setattr、hasattr、delattr这四个函数是Python动态特性的地基。尤其在写框架、写装饰器、处理配置文件映射到对象属性这些场景下几乎天天用。hasattr(obj, name)判断对象有没有某个属性。setattr(obj, name, value)设置属性。delattr(obj, name)删除属性。这三兄弟对应了属性的增删查。最实用的是getattr(obj, name, default)它比直接obj.name多了一个兜底默认值。比如从外部传入的配置对象不一定有某个字段时用getattr(config, timeout, 30)能避免一堆try/except AttributeError。还有一种典型用法是按名字批量调用方法。比如有一组策略对象它们的类名或者方法名是字符串形式你可以在循环里getattr(strategy, method_name)()动态调用而不需要写一大堆if method_name foo的分支。我自己写命令行工具时命令分派经常就是靠getattr完成的。4.2 类型与实例关系type、isinstance、issubclass、callabletype(obj)返回对象的类型。比如type(3)是class int。注意type本身是元类所以type还可以用来动态创建类不过日常几乎不这么干。isinstance(obj, class_or_tuple)判断对象是否属于某类型或其子类比如isinstance(x, (int, float))。这里有个常见的认知误区isinstance和type(x) is int不一样。前者考虑继承关系后者不管。写代码时我几乎只用isinstance因为Python的鸭子类型哲学下子类替换父类是常态直接比类型等于太死板了。issubclass(cls, base)判断类的继承关系在写元类或框架代码时有用。callable(obj)判断对象能不能被调用也就是后面能不能加括号。这个东西在写插件系统时非常有用——配置文件里指定了一个函数名你得先callable判断一下它到底是不是个函数别拿着字符串就()上去直接崩掉。4.3 身份与哈希id、hashid(obj)返回对象在内存中的唯一标识CPython里就是内存地址。判断两个变量是否指向同一个对象用a is b本质上就是比较id。hash(obj)返回对象的哈希值。可哈希的对象数字、字符串、元组等才能作为字典的键和集合的元素。当你需要把自己定义的对象放进set去重时实现__hash__和__eq__是必须的。而hash的一个实用场景是做缓存把一组不可变参数打包成元组hash一下作为字典的key比直接存大元组省内存虽然这个优化多数时候没那么必要。5. 冷门但关键时刻救命的一批函数5.1 字符与编码ord、chrord(char)返回字符的Unicode码位chr(code)反向操作。这俩看似冷门但在处理字符集、文本加密、生成规律字符串时非常实用。比如你想生成字母表[chr(i) for i in range(ord(a), ord(z) 1)]一行就得。又比如处理Excel列号和数字的转换——这就是个进制转换问题chr和ord恰好能当字母数字互转的桥梁。还有一个常见场景判断一个字符串里是否全是数字。isdigit()方法能判断但如果你拿到的是汉字数字、带圈数字isdigit的表现可能出乎意料。此时ord(c)查看码位范围反而是更可控的判断方式。5.2 格式化利器format大部分人都知道字符串的{}.format()方法但忽略了一个同名内置函数format(value, spec)。其实两者底层是同一套机制区别在于内置函数版不需要拼字符串直接对单个值做格式化。format(255, x)得到ff十六进制format(0.25, .2%)得到25.00%百分比格式化。在f-string普及的今天内置format函数的独有价值在于它可以作为一等公民传递比如放进列表批量格式化数值formatters [d, x, o, b] value 13 for f in formatters: print(format(value, f)) # 13, d, 15, 1101配合map或者列表推导批量格式化需求一行代码完成比反复写f{x:...}优雅不少。5.3 动态执行与表达式求值eval、exec、compileeval(string)把字符串当Python表达式求值比如eval(1 2)得到3。exec(string)更狠能执行完整的代码块。compile()则是先把字符串编译成字节码对象之后可以反复执行。这三兄弟的能力很强但我在实战里会反复强调一个原则用它们之前先想想有没有别的办法。因为它们执行的是字符串里的任意代码一旦这个字符串来自用户输入、文件内容、外部接口就等于是把代码执行的钥匙交给了别人安全风险是灾难性的。如果真的要用至少要有三道防线白名单校验、限制代码长度、在受控环境里运行。我在自己的工具里只会在读取本地配置文件时用exec做动态变量注入且配置文件是写死的、不来自外部。日常开发能用json、ast.literal_eval处理配置就绝不用eval。6. 综合小案例如何合理利用内置函数写出简洁还不出错的代码讲完分类用一个真实场景把前面这些函数串起来直观感受一下全部用内置函数和全手写循环的区别。假设你有一个日志文件每行格式是IP 时间 URL 状态码 延迟ms需要统计每个IP出现的次数、找出平均延迟最高的IP、并筛选出状态码大于等于500的请求数。传统写法可能要40行到处是for循环、临时字典、变量累加。用内置函数组合做法是这样# 模拟日志行 lines [ 10.1.1.1 12:00 GET /a 200 50, 10.1.1.2 12:01 GET /b 500 120, 10.1.1.1 12:02 GET /c 404 30, 10.1.1.3 12:03 GET /d 500 200, ] parsed [] for line in lines: ip, _, _, _, status, delay line.split() parsed.append((ip, int(status), int(delay))) from collections import defaultdict ip_status defaultdict(list) ip_delay defaultdict(list) for ip, status, delay in parsed: ip_status[ip].append(status) ip_delay[ip].append(delay) # 统计 for ip, delays in ip_delay.items(): print(ip, sum(delays) / len(delays)) count_5xx sum(1 for _, status, _ in parsed if status 500) print(5xx数:, count_5xx)这个例子其实还能进一步优化状态码筛选可以用filterIP出现次数可以直接用内置函数配字典。更关键的是你看出内置函数没法替代手动defaultdict的统计逻辑这个时候自己写几行循环是合理且必要的。内置函数不是银弹。它的价值在于消灭那些遍历-转化-取极值-聚合的模板代码而像分组计数这类逻辑标准库的collections.Counter和defaultdict才是更好的选择。所以我的建议是能用一个内置函数表达的操作绝不用三行循环但该手写逻辑的地方也不要硬凑内置函数。7. 实用避坑心得我用了多年Python后总结的硬经验7.1 变量命名别和内置函数撞车我见过太多人写代码时定义了一个叫list的变量或者写了一个叫str的函数。在一开始没问题等后面想用list()做转换时直接报TypeError: list object is not callable。排查半天才反应过来自己的变量把内置函数覆盖了。解决办法有两层第一变量命名永远避开内置函数和关键字第二但有时候为了局部语义比如一个列表叫list确实最直白那我建议用完立刻del list或者干脆养成分不清时先import builtins用builtins.list()的形式调用绕开覆盖问题。后来我干脆在代码规范里加了条所有覆盖内置函数的做法一律打回宁可变量名长一点。7.2 round的舍入规则不是唯一坑min和max的空序列也会坑你min([])会抛ValueError但有些业务场景里空列表的最小值应该是某个默认值。Python 3.4之后min和max都支持了default关键字参数low min([]) # 报错 low min([]) # 会崩 low min([]) # 教你正确方法 # 正确写法 low min([], default0)这个细节看着小但在处理可能为空的数据集时能省掉一个if判断。我在处理爬虫清洗结果、报表汇总时几乎每天都会用到。7.3 bool是int的子类这个特性别乱用但别忽略isinstance(True, int)的结果是True。这意味着True可以参与算术运算True 1等于2。平时写代码别依赖这个特性但理解这一点有助于解释一些怪异行为比如sum([True, False, True])结果是2这在统计满足条件的元素个数时其实很妙count sum(x 60 for x in scores)这个写法比先filter再len更直白因为生成器里的布尔值被sum当成了0和1来累加。是我个人比较偏爱的一个技巧。7.4 别把eval当配置解析器用关于eval的安全风险我已经强调过这里再补一个实际教训。有个项目曾经用eval解析用户上传的表达式规则结果被人传入一段系统操作命令虽然没有造成损失但排查和修复的过程让人深刻意识到字符串形式的代码执行优先级高于一切其他业务逻辑除非完全可控否则坚决不用。后来我把相关逻辑全部改成ast.literal_eval它只解析字面量字符串、数字、布尔、列表、字典都能还原但不执行任何代码安全性高了一个量级。8. 写在最后内置函数是Python的共享词汇表花了不少篇幅把内置函数按分类过了一遍但你不需要一次性记全更不需要抠每个函数的边界特性。我的建议是先记住三大类类型转换、数值运算、迭代操作。这三个大类覆盖了日常80%的代码场景。剩下那些相对冷门的函数在遇到具体问题时再翻文档也不迟。我带了几个零基础入行的新人每次让他们先把内置函数主动用起来最明显的变化就是代码风格从看起来像C语言翻译版变成一眼看去就是个Python程序。原因很简单内置函数是Python社区公认的表达方式用了它们别人读你的代码时不需要额外理解一套自造逻辑沟通成本直线下降。最后再分享一个小技巧打开Python交互环境输入dir(__builtins__)就能看到当前环境里所有的内置函数和异常类型。每隔一段时间停下来看看这个列表挑一两个没怎么用过的函数查查文档你的工具箱就会越来越满。我在实际写代码时很多灵感就是在这样翻工具箱的过程中获得的。

关于恒美微站

恒美微站专注于为个体商户、工作室提供极简自助建站服务,让每个人都能轻松拥有专业网站。

快速链接

  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心

服务项目

  • 可视化建站
  • 拖拽编辑
  • 主题定制
  • SEO 优化
  • 网站托管

联系方式

  • 📍 地址:北京市朝阳区建国路 88 号
  • 📞 电话:400-888-8888
  • ✉️ 邮箱:info@hmyw.cn
  • 🕐 时间:周一至周日 9:00-18:00

© 2024 恒美微站 hmyw.cn 版权所有 | 京 ICP 备 12345678 号