1. 为什么我要把77个Python函数翻出来重新整理刚学Python那会儿我特别迷信“背函数”。网上搜“Python常用函数”收藏了几十篇结果真到写代码的时候脑子里只剩一个print()。后来带新人、做Code Review、帮同事排查脚本问题我才慢慢意识到函数不是拿来背的是拿来“认脸”的。你不需要记住每个参数的默认值但你必须知道“这个场景大概有哪个函数能干活”然后去查文档、去试。这篇总结的77个函数是我从日常写脚本、做数据处理、搭小工具的过程中反复用到、反复查、反复教别人的那一批。它们覆盖了内置函数、字符串处理、列表字典操作、文件读写、异常处理、常用标准库这几个高频区域。我不会给你一个干巴巴的清单而是按“这个函数解决什么问题、什么时候用、有什么坑”来讲。适合刚入门Python、能写简单脚本但总觉得“不够顺手”的人也适合工作几年但想系统梳理一下基础工具链的开发者。提示函数签名和参数细节以你当前使用的Python版本官方文档为准本文侧重使用场景和实操经验。2. 内置函数那些你每天都在用但可能没用透的家伙2.1 类型转换与判断int、float、str、bool、type、isinstanceint()、float()、str()、bool()这四个是类型转换的“四大金刚”。但很多人不知道int()可以带第二个参数做进制转换int(ff, 16) # 255 int(1010, 2) # 10这个在解析配置文件、处理硬件返回的十六进制数据时特别有用。bool()的坑在于空字符串、空列表、空字典、None、数字0都会返回False其他返回True。我见过有人写if bool(user_input):来判断用户是否输入了内容其实直接if user_input:就够了。type()和isinstance()的区别是面试常问的。type(obj) int不会考虑继承关系而isinstance(obj, int)会。实际开发中优先用isinstance()因为你的代码可能用到子类或者boolbool是int的子类。isinstance(True, int) # True type(True) int # False2.2 数学运算abs、round、pow、divmod、sum、min、maxabs()取绝对值round()四舍五入。注意round()的“银行家舍入”行为round(2.5) # 2 round(3.5) # 4它不是简单的四舍五入而是“四舍六入五成双”。做金融计算时千万别直接用round()要用decimal模块。divmod(a, b)返回(a // b, a % b)也就是商和余数。这个函数在分页计算里特别好用总共有100条数据每页显示7条需要多少页total, per_page 100, 7 pages, remainder divmod(total, per_page) page_count pages (1 if remainder else 0) # 15页sum()可以对可迭代对象求和但注意它只能用于数字。min()和max()可以传key参数words [apple, banana, cherry] longest max(words, keylen) # banana2.3 序列操作len、range、enumerate、zip、sorted、reversedlen()不用多说。range()的坑在于它返回的是一个“惰性序列”不是列表。Python 3里range(1000000)不会占用大量内存但如果你需要反复遍历或者索引可以先转成list。enumerate()是我最喜欢的内置函数之一。以前写循环要维护索引# 老写法 index 0 for item in items: print(index, item) index 1 # 用enumerate for index, item in enumerate(items): print(index, item)zip()可以把多个列表“拉链式”合并names [Alice, Bob, Charlie] scores [85, 92, 78] for name, score in zip(names, scores): print(f{name}: {score})注意zip()在Python 3里返回迭代器只能遍历一次。如果需要多次使用转成list。sorted()和reversed()的区别sorted()返回新列表reversed()返回迭代器。sorted()的key参数极其强大students [ {name: Alice, score: 85}, {name: Bob, score: 92}, ] sorted(students, keylambda s: s[score], reverseTrue)2.4 输入输出与对象操作print、input、id、hash、repr、dir、helpprint()的sep和end参数很多人没用过print(a, b, c, sep-) # a-b-c print(hello, end ) print(world) # hello worldinput()永远返回字符串需要数字要自己转。id()返回对象的内存地址hash()返回哈希值。repr()返回对象的“官方”字符串表示调试时比str()更有用。dir()列出对象的所有属性和方法help()查看文档。这两个是自省利器遇到不熟悉的库先dir()再help()。3. 字符串处理文本清洗和格式化的核心工具3.1 大小写与判断upper、lower、title、capitalize、startswith、endswith、isdigit、isalphaupper()和lower()做大小写转换。title()把每个单词首字母大写capitalize()只把第一个字符大写。做用户输入规范化时通常先strip()再lower()。startswith()和endswith()可以传元组filename report.pdf if filename.endswith((.pdf, .doc, .docx)): print(文档文件)isdigit()判断是否全是数字但注意它不认负号和小数点。isalpha()判断是否全是字母。这两个在表单验证里很常用但更复杂的验证建议用正则。3.2 查找替换与分割find、index、replace、split、rsplit、join、strip、lstrip、rstripfind()找不到返回-1index()找不到抛异常。我一般用find()因为不想写try-except。split()默认按空白字符分割也可以指定分隔符和分割次数2024-01-15.split(-) # [2024, 01, 15] a,b,c,d.split(,, 2) # [a, b, c,d]rsplit()从右边开始分割处理文件路径时有用。join()是split()的逆操作但注意它只能连接字符串列表-.join([2024, 01, 15]) # 2024-01-15strip()去掉首尾空白lstrip()和rstrip()分别去左和右。它们也可以传参数去掉指定字符###hello###.strip(#) # hello3.3 格式化format、f-string、zfill、center、ljust、rjustformat()是老牌格式化方法f-string是Python 3.6的语法糖。我现在的代码里90%的格式化都用f-string因为它可读性最好name Alice score 92.5 print(f{name}的分数是{score:.1f}) # Alice的分数是92.5zfill()补零做编号生成时好用str(7).zfill(3) # 007center()、ljust()、rjust()做对齐输出写命令行工具时有用print(Name.ljust(10), Score.rjust(5)) print(Alice.ljust(10), 92.rjust(5))4. 列表、字典与集合数据组织的三驾马车4.1 列表操作append、extend、insert、remove、pop、clear、index、count、sort、copyappend()加单个元素extend()加多个元素。很多人搞混a [1, 2] a.append([3, 4]) # [1, 2, [3, 4]] a.extend([3, 4]) # [1, 2, 3, 4]remove()按值删除pop()按索引删除并返回。pop()不传参数默认删最后一个所以列表当栈用就是append()加pop()。sort()是原地排序sorted()返回新列表。sort()不能对包含不可比较元素的列表使用比如[1, a]会报错。copy()是浅拷贝。嵌套列表要深拷贝得用copy.deepcopy()import copy a [[1, 2], [3, 4]] b copy.deepcopy(a)4.2 字典操作get、keys、values、items、update、pop、setdefaultget()是字典最实用的方法没有之一config {host: localhost, port: 8080} config.get(timeout, 30) # 30items()遍历键值对for key, value in config.items(): print(key, value)setdefault()在键不存在时设置默认值并返回groups {} groups.setdefault(admin, []).append(Alice)这行代码的意思是如果admin键不存在设为空列表然后往里面加Alice。比写if-else简洁得多。update()合并字典Python 3.9还可以用|运算符a {x: 1} b {y: 2} a.update(b) # {x: 1, y: 2} # 或者 c a | b4.3 集合操作add、remove、union、intersection、difference、issubset集合最大的价值是去重和快速成员判断nums [1, 2, 2, 3, 3, 3] unique list(set(nums)) # [1, 2, 3]union()并集intersection()交集difference()差集。做权限对比、标签匹配时特别方便user_a {read, write} user_b {read, delete} common user_a user_b # {read} only_a user_a - user_b # {write}5. 文件与异常让脚本真正能干活5.1 文件读写open、read、readline、readlines、write、writelines、close、withopen()的文件模式要记清楚r读w写覆盖a追加b二进制。永远用with语句with open(data.txt, r, encodingutf-8) as f: content f.read()read()读全部readline()读一行readlines()读所有行到列表。大文件不要用read()会爆内存。逐行读with open(big_file.txt, r, encodingutf-8) as f: for line in f: process(line.strip())writelines()接收字符串列表但不会自动加换行符需要自己加lines [line1\n, line2\n] with open(output.txt, w) as f: f.writelines(lines)5.2 异常处理try、except、else、finally、raise、asserttry-except的基本结构try: result 10 / 0 except ZeroDivisionError as e: print(f出错了: {e}) else: print(没出错) finally: print(无论如何都执行)else在没异常时执行finally无论如何都执行。raise主动抛异常assert做断言可以用-O参数禁用。注意不要用裸的except:它会捕获所有异常包括KeyboardInterrupt导致程序无法正常退出。至少写except Exception:。5.3 常用标准库函数os、sys、json、datetime、random、reos.path.join()拼路径os.path.exists()判断存在os.makedirs()创建目录。sys.argv获取命令行参数sys.exit()退出程序。json.dumps()和json.loads()做JSON序列化和反序列化import json data {name: Alice, age: 30} json_str json.dumps(data, ensure_asciiFalse, indent2)datetime.now()获取当前时间strftime()格式化from datetime import datetime now datetime.now() print(now.strftime(%Y-%m-%d %H:%M:%S))random.choice()随机选一个random.shuffle()打乱列表random.randint()生成随机整数。re.findall()、re.search()、re.sub()是正则三件套。处理文本清洗时正则比字符串方法更灵活import re text 联系方式: 138-1234-5678 phones re.findall(r\d{3}-\d{4}-\d{4}, text)6. 常见问题与排查技巧实录6.1 函数用错场景的典型翻车现场坑一list.append()返回None。很多人写a [].append(1)结果a是None。append()是原地操作不返回新列表。坑二sort()和sorted()搞混。sort()只能用于列表原地排序返回Nonesorted()可用于任何可迭代对象返回新列表。坑三dict.get()和dict[key]混用。dict[key]在键不存在时抛KeyErrorget()返回None或默认值。不确定键是否存在时永远用get()。坑四strip()去掉了不该去的字符。hello world.strip(h)返回ello world它去掉的是首尾所有h字符不是前缀。坑五round()的银行家舍入。前面说过金融计算用decimal。6.2 性能相关的注意事项in操作在列表上是O(n)在集合和字典上是O(1)。频繁做成员判断时先把列表转成集合# 慢 if item in big_list: # O(n) # 快 big_set set(big_list) if item in big_set: # O(1)字符串拼接用join()而不是# 慢 result for s in strings: result s # 快 result .join(strings)6.3 常见问题速查表问题现象可能原因解决方法TypeError: NoneType object is not iterable函数返回了None检查是否用了append()、sort()等原地方法的返回值KeyError字典键不存在用get()或先判断inIndexError列表索引越界用len()检查长度或用切片UnicodeDecodeError文件编码不对open()时指定encodingutf-8IndentationError缩进不一致统一用4个空格别混用TabAttributeError对象没有该属性用dir()查看可用方法6.4 我个人的实操心得带新人的时候我发现大家最容易犯的错不是“不知道某个函数”而是“不知道某个函数存在”。比如不知道enumerate()就手动维护索引不知道setdefault()就写一堆if-else不知道with就忘了close()。我的建议是每学一个新函数就把它用到实际脚本里。哪怕只是把原来的三行代码改成一行这个函数就真正变成你的了。另外help()和dir()要养成习惯用比搜索引擎快。还有一个技巧用python -i script.py进入交互模式脚本执行完后可以继续在交互环境里试函数。调试的时候特别方便。7. 把77个函数变成自己的工具箱这77个函数不是让你背下来的。我的做法是把它们按场景分类写成一个自己的“速查笔记”放在项目根目录的docs/下面。每次写代码遇到“这个操作好像有内置函数”的时候先翻笔记翻不到再搜。另外Python的collections、itertools、functools这几个模块里还有很多宝藏函数比如Counter、defaultdict、chain、partial。等你把这77个用熟了自然会想去看这些进阶工具。最后分享一个我常用的调试技巧在脚本里临时加一行breakpoint()Python 3.7会进入调试器可以查看变量、单步执行。比到处print()高效得多。
企业数字化 ERP 产品动态
相关推荐
高项论文备考卡壳?从项目管理实战视角拆解写作困局与行动路径 “备考26年高项被论文困住了下一步的行动”——光是这个标题,我猜你已经不是第一次打开论文备考相关的文章了。上午选择题能刷到50多分,案例题也勉强能应对,唯独论文,一想起来就心里发虚。这不是你一个人的问题,我带过… · 2026/9/25 7:34:09
Agent技能化实战:从提示词封装到SKILL.md落地与调试指南 1. 为什么Agent项目需要"技能"而不是"提示词"?1.1 从一次失败的对话说起上个月我负责的一个客服场景Agent项目进入联调阶段,需求不复杂:用户提问,Agent先判断意图,再调用对应接口,最后… · 2026/9/25 7:34:09
第十五篇:用好Plan模式:创始人建议90%的时间都在用它 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 7:34:09
SVM检测恶意URL:37维手工特征与线性核工程实践 简介:本资源是一套基于机器学习的恶意URL检测实战项目,面向计算机、人工智能、大数据等专业的本科生及初阶开发者,适用于课程设计、毕业设计与安全算法入门实践。项目完整实现从URL特征提取、模型训练(含SVM等经典算法)… · 2026/9/25 7:53:39
Atlas 300V 24G推理加速卡上高效部署YOLOv5全流程指南 先来说个真实经历。入职第二年接手了一个园区安防项目,甲方丢过来一批盒子,点名要跑YOLOv5做实时检测,厂家给的资料就一行字:Atlas 300V 24G推理卡。当时团队里没人碰过昇腾,第一反应是这卡到底能不能用来训练… · 2026/9/25 7:53:39
SQL注入绕过登录原理与防御:从拼接逻辑到实战靶场 第一次在 PortSwigger Academy 上做 SQL 注入绕过登录(Login Bypass)这个实验的时候,我其实有点不以为然。万能密码这东西听起来像十几年前的考古内容,总觉得在参数化查询、ORM 普及的今天,早就没什么实战价值了。但真… · 2026/9/25 7:53:39
Atlas 300V 24G NPU上部署YOLO:从环境配置到性能优化 最近有人问我“Atlas”是什么,说实话第一反应是数据库中间件那头大象,结果他后面跟了一句“部署YOLO”,又补了个“300V 24G”,我立马就明白他说的其实是昇腾Atlas系列的AI加速卡。这名字在AI领域有点被说烂了,因为它既… · 2026/9/25 7:53:33
昇腾Atlas 300V 24G加速卡部署YOLO全流程实战 1. 先搞清楚Atlas 300V 24G的定位:是加速卡,但不是你以为的那种加速卡1.1 一张卡解决什么问题看到热搜里连续出现“atlas部署yolo”和“atlas 300v 24g 是运算加速卡吗”这两条,我就知道又有一批做边缘AI或服务器推理的同学被这张卡吸引过来了… · 2026/9/25 7:53:27
创维E900V22D刷机全攻略:S905L3SB芯片兼容性解析与救砖实战 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:31
MQTT协议原理与Broker服务器搭建实战:从Mosquitto到EMQX /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:37