找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

2459

积分

0

好友

333

主题
发表于 2 小时前 | 查看: 3| 回复: 0

Python 中有一些内置函数,平日里看起来平平无奇,但当你真正投入到业务逻辑编写、自动化脚本开发或者数据分析时,它们却能帮你省去大量冗余代码,让思路更清晰。这篇文章不讲大道理,直接分享 6 个我个人在 Python 开发中高频使用且极易上手的函数,希望能帮你提升编码效率。

1. enumerate():告别手动索引,循环更优雅

很多新手在写循环时,习惯这样操作:

names = ["alice", "bob", "tom"]

for i in range(len(names)):
    print(i, names[i])

这不算错,但总觉得有些绕。更优雅的写法是直接使用 enumerate()

names = ["alice", "bob", "tom"]

for idx, name in enumerate(names, start=1):
    print(f"{idx}: {name}")

start=1 这个参数非常实用,特别是在生成带序号的列表、排行榜或分页结果时,无需再手动 +1

我在处理日志文件定位问题时,就经常这么写:

with open("app.log", "r", encoding="utf-8") as f:
    for line_no, line in enumerate(f, start=1):
        if "ERROR" in line:
            print(f"第{line_no}行有异常: {line.strip()}")

相比自己维护一个计数器,这种写法要干净利落得多。

2. zip():轻松配对数据,字典构造好帮手

当我们需要同时处理两组一一对应的数据时,比如用户名和其对应的分数:

users = ["u01", "u02", "u03"]
scores = [88, 92, 79]

for user, score in zip(users, scores):
    print(user, score)

输出自然就是配好的对。

我个人更常用的场景是快速构造字典,尤其在处理 API 参数或 CSV 数据时:

fields = ["id", "name", "age"]
values = [101, "东哥", 18]

row = dict(zip(fields, values))
print(row)
# {'id': 101, 'name': '东哥', 'age': 18}

另一个高频场景是批量比对新老数据:

old = [10, 20, 30]
new = [10, 25, 28]

for before, after in zip(old, new):
    if before != after:
        print(f"数据变化: {before} -> {after}")

这样的代码逻辑清晰,一目了然。

3. sorted():排序不修改原数据,生产环境更安心

排序时最担心的两点:一是代码冗长,二是不小心原地修改了原始数据。sorted() 函数的好处就在于它返回一个新列表,不影响原数据:

orders = [
    {"id": 1, "amount": 99},
    {"id": 2, "amount": 15},
    {"id": 3, "amount": 56},
]

result = sorted(orders, key=lambda x: x["amount"], reverse=True)
print(result)

如果你只是想获取一个排序后的结果用于后续处理,sorted()list.sort() 更安全,尤其是在 Web后端 的接口逻辑中。

更实用的技巧是按多字段排序,例如先按任务状态,再按创建时间:

tasks = [
    {"name": "job1", "status": 2, "ts": 1701},
    {"name": "job2", "status": 1, "ts": 1705},
    {"name": "job3", "status": 1, "ts": 1702},
]

tasks = sorted(tasks, key=lambda x: (x["status"], x["ts"]))

这比手写一堆 if-else 判断要简洁高效得多。

4. any():检查“至少一个满足”的场景利器

你以前是否也写过这样的代码?

has_error = False
for line in lines:
    if "ERROR" in line:
        has_error = True
        break

这个逻辑完全可以用 any() 函数一行搞定:

lines = ["INFO start", "WARN timeout", "ERROR db down"]

has_error = any("ERROR" in line for line in lines)
print(has_error)  # True

它在数据校验时特别顺手。比如检查密码是否至少包含一个数字:

password = "abcx9yz"

if not any(ch.isdigit() for ch in password):
    print("密码至少要包含一个数字")

这类代码简短且语义直接,一看就懂在做什么。

5. all():校验“全部满足”的条件,简化参数检查

all() 函数通常和 any() 一起被记忆。它在接口参数校验时特别好用:

payload = {
    "user_id": "1001",
    "mobile": "13800001111",
    "city": "shanghai"
}

ok = all(payload.get(k) for k in ["user_id", "mobile", "city"])
print(ok)

再比如,检查一批任务是否全部执行成功:

results = [True, True, True, False]

if not all(results):
    print("有任务没跑成功")

在我写批处理脚本时,最后常常用它来做一次整体确认:

files = ["a.txt", "b.txt", "c.txt"]

done = all(name.endswith(".txt") for name in files)
print(done)

这种场景下如果不用 all(),往往需要多写好几行样板代码。

6. map():配合现成函数进行批量转换

很多人对 map() 有所犹豫,因为列表推导式同样强大且直观。这没错,但在某些场景下,map() 用起来依然很顺手,尤其是当转换逻辑已经是一个定义好的函数时。

例如,将字符串列表批量转换为整数:

raw = ["10", "20", "30", "40"]
nums = list(map(int, raw))
print(nums)

再比如,批量清洗用户输入的名字:

raw_users = [" alice ", " BOB ", " Tom "]

def normalize(name: str) -> str:
    return name.strip().lower()

users = list(map(normalize, raw_users))
print(users)

当转换动作本身是一个独立的、可复用的函数时,使用 map() 会让代码的意图非常清晰。当然,对于需要复杂条件过滤或字段组合的场景,列表推导式往往是更优的选择,可读性会更高。

以上就是我个人在 Python 开发中觉得非常实用的 6 个内置函数。它们不是什么炫技的奇技淫巧,而是在日常编码中能实实在在提升效率和代码可读性的工具。如果你有自己私藏的“宝藏函数”,也欢迎在 云栈社区 分享交流。




上一篇:AI代理购物时代:商家如何通过World AgentKit与x402协议验证“你”是你?
下一篇:从大厂P9被裁到卖保险,聊聊技术人的二分查找与职业焦虑
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2026-3-19 09:27 , Processed in 0.487985 second(s), 40 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2026 云栈社区.

快速回复 返回顶部 返回列表