Python 新版本的内置函数太香了!
告别繁琐操作,让代码自己“动起来”
各位程序员朋友们,你是否也曾为下面这些场景感到头疼?
处理用户输入的文件路径,总要手动去掉那些烦人的 "attachment_"前缀?计算几何距离时,不得不自己写循环去实现欧氏距离公式? 解析项目配置文件,总要 pip install tomli安装一个外部库?
如果你还在用“老办法”解决这些问题,那么今天这篇文就是为你准备的!Python 在 3.9 到 3.12 版本的迭代中,悄悄塞进了许多“开箱即用”的新内置函数和模块,专治各种代码中的“重复造轮子”和“繁琐操作”。
让我们一起来看看,如何用这些现代 Python 特性,优雅地“偷懒”,让代码更简洁、更高效。
一、字符串处理
字符串处理是日常编程的基石。以前,如果想去掉字符串特定的前缀或后缀,我们得用 str.startswith()/str.endswith() 判断,然后切片,或者用 str.lstrip()/str.rstrip(),但它们可能误伤无辜字符。
Python 3.9 带来了精准的“外科手术刀”:
str.removeprefix() & str.removesuffix()
这两个函数的功能正如其名:仅当字符串以指定前缀/后缀开头/结尾时,才将其移除,否则返回原字符串。简单、安全、意图明确。
# 告别繁琐的切片和条件判断
filename = "2023_report_final.pdf"
user_input = "admin_"
# 旧方法:需要判断再切片
if filename.startswith("2023_"):
clean_name = filename[5:]
print(clean_name) # 输出: report_final.pdf
# 新方法:一行搞定,意图清晰
clean_name = filename.removeprefix("2023_")
print(clean_name) # 输出: report_final.pdf
# 更安全的例子
path = "project/utils.py"
print(path.removesuffix(".txt")) # 后缀不匹配,返回原字符串: project/utils.py
print(path.removesuffix(".py")) # 后缀匹配,成功移除: project/utils
这就像给你的代码工具箱里添了一把精准的剪刀,不再需要先用眼睛瞄,再用普通剪刀估摸着剪了。
二、数学与统计
Python 的 math 和 statistics 模块一直在扩充,将很多常用的计算函数直接内置,性能经过高度优化,比自己手写循环要快得多。
1. 距离与组合计算(Python 3.10+)
**math.dist(p, q)**:计算两点间的欧氏距离。支持任意维度,比自己写 sqrt(sum((px-qx)**2 ...)) 更优雅、更不易出错。 **math.comb(n, k) & math.perm(n, k)**:快速计算组合数 C(n, k) 和排列数 A(n, k)。在算法、概率统计场景下非常实用。
import math
# 1. 几何距离计算
point_a = (1, 2, 3)
point_b = (4, 5, 6)
distance = math.dist(point_a, point_b)
print(f"三维空间两点距离: {distance:.2f}") # 输出: 5.20
# 2. 组合数学
# 从5个不同的球中取出3个,有多少种取法?
ways_to_choose = math.comb(5, 3)
print(f"组合数 C(5,3) = {ways_to_choose}") # 输出: 10
# 将3面不同的旗子按顺序插在5个孔里,有多少种插法?
ways_to_arrange = math.perm(5, 3)
print(f"排列数 A(5,3) = {ways_to_arrange}") # 输出: 60
2. 更强大的统计模块(Python 3.10+)
statistics 模块新增了 correlation, covariance, linear_regression 等函数,基础数据分析几乎不用依赖 numpy 了。
import statistics
# 计算两组数据的相关系数和协方差
x = [1, 2, 3, 4, 5]
y = [2, 4, 5, 4, 5]
corr = statistics.correlation(x, y)
covar = statistics.covariance(x, y)
print(f"相关系数: {corr:.3f}") # 输出: 0.775
print(f"协方差: {covar:.3f}") # 输出: 1.25
# 甚至可以进行简单的线性回归
slope, intercept = statistics.linear_regression(x, y)
print(f"回归方程: y = {slope:.2f}x + {intercept:.2f}")
# 输出: y = 0.70x + 1.70
对于轻量级的数据分析或脚本任务,这些内置函数能让你摆脱对庞大科学计算库的依赖,快速得出结果。
三、系统与时间
1. 时区处理终于“标准化”(Python 3.9+)
处理时间时,最让人混乱的就是时区。过去常用 pytz,但它有一些历史包袱。Python 3.9 将 zoneinfo 模块纳入标准库,基于系统的 IANA 时区数据库,用法更现代、直观。
from datetime import datetime, timezone
from zoneinfo import ZoneInfo # Python 3.9+
# 创建一个具有特定时区的时间
beijing_time = datetime(2023, 10, 1, 10, 0, tzinfo=ZoneInfo("Asia/Shanghai"))
print(f"北京时间: {beijing_time}")
# 轻松进行时区转换
new_york_time = beijing_time.astimezone(ZoneInfo("America/New_York"))
print(f"对应的纽约时间: {new_york_time}")
# 获取当前UTC时间,并转换为本地时区
utc_now = datetime.now(timezone.utc)
local_now = utc_now.astimezone() # 不传参数,转换为系统本地时区
print(f"本地时间: {local_now}")
2. 高性能的纯Python哈希(Python 3.11+)
hashlib 模块在 3.11 中新增了用纯Python实现的 blake2b 和 blake2s 哈希算法。这意味着在某些环境下(如禁用C扩展),你仍然可以使用这些安全的哈希函数。
import hashlib
data = b"Hello, Modern Python!"
# 使用新的纯Python实现的BLAKE2进行哈希
hash_obj = hashlib.blake2b(data, digest_size=32)
print(f"BLAKE2b 哈希值: {hash_obj.hexdigest()}")
四、TOML 配置解析(Python 3.11+)
TOML 因其清晰的语义,正在迅速取代 INI 和 YAML,成为项目配置(如 pyproject.toml)的新宠。Python 3.11 将 tomllib 模块加入标准库,让你无需任何外部依赖即可解析 TOML。
假设我们有一个 config.toml 文件:
[database]
host = "localhost"
port = 5432
name = "mydb"
[server]
debug = true
allowed_hosts = ["127.0.0.1", "192.168.1.1"]
解析它变得轻而易举:
import tomllib # Python 3.11+
with open("config.toml", "rb") as f: # 注意:必须以二进制模式打开
config = tomllib.load(f)
print(f"数据库主机:{config['database']['host']}")
print(f"调试模式?{config['server']['debug']}")
print(f"允许的主机列表:{config['server']['allowed_hosts']}")
# 如果你想生成TOML,仍需要安装 `tomli-w` 或 `tomlkit` 等库。
这意味着你的下一个项目,从第一天起就可以用上标准的 pyproject.toml 来管理元数据和工具配置,而不用担心环境依赖问题。
写在最后
从 Python 3.9 到 3.12,每一次更新都围绕着让常见任务更简单、让代码更健壮、让性能更优的目标。我们今天看到的这些新函数和模块,只是冰山一角,但无疑是最实用、最能立刻提升开发体验的部分。
简单总结一下:
字符串处理(3.9): str.removeprefix()/removesuffix()让字符串修剪精准无误。数学工具箱(3.10+): math.dist(),comb(),perm()以及statistics的增强,让基础数学计算和数据分析“自带轮子”。时间管理者(3.9+): zoneinfo让时区处理标准化、现代化。配置管家(3.11+): tomllib让 TOML 配置解析成为语言原生能力。
技术的进步,就是为了让我们能把精力集中在真正的业务逻辑和创新上,而不是反复解决那些已被完美解决的通用问题。
你已经在用 Python 3.9+ 的哪个版本了?上述新功能中,哪个最让你觉得“早就该有了”?或者你有其他私藏的、能极大提升效率的 Python “偷懒”技巧?
欢迎在评论区分享你的想法和实践经验! 让我们一起交流,共同解锁更高效的 Python 编程姿势。
🏴☠️宝藏级🏴☠️ 原创公众号『数据STUDIO』内容超级硬核。公众号以Python为核心语言,垂直于数据科学领域,包括可戳👉Python|MySQL|数据分析|数据可视化|机器学习与数据挖掘|爬虫等,从入门到进阶!
长按👇关注- 数据STUDIO -设为星标,干货速递