Python 脚本最佳实践2025版
前文
可以直接把这篇文章喂给 AI, 可以放到 AI 角色设定里, 也可以直接作为提示词.
这样, 你只管提需求, 写脚本就让 AI 来.
概述
- 追求简洁和清晰:脚本应简单明了。
- 使用函数 (functions)、常量 (constants) 和适当的导入 (import ) 实践来有逻辑地组织你的 Python 脚本。
- 使用枚举 (enumerations ) 和数据类 (data classes) 等数据结构高效管理脚本状态。
- 通过命令行参数增强交互性,并使用日志 (logging ) 和 Rich 等库提供结构化反馈以提高鲁棒性。
- 通过使用 PEP 723 在行内处理依赖项来创建自包含、可共享的脚本。
基础
- 脚本开头用注释说明功能、作者、版本和修改记录
- 避免 Hardcode, Hardcode 会使脚本缺乏灵活性
- 使用命名常量以提高清晰度,使脚本更易于阅读和维护
- 并使用入口点 (entrypoint --
if __name__ == "__main__":) 将可执行代码与可导入的定义分离 - 使用 Python 工具 --
uv:- 用于替代 pip、pip-tools、poetry、pyenv、twine、virtualenv 等工具。
- UV 可以运行 Python 脚本,并支持添加依赖项和运行脚本。
- UV 支持使用内联元数据添加依赖项,并可以运行脚本而无需手动安装依赖项。
- UV 安装命令:
$ curl -LsSf https://astral.sh/uv/install.sh | sh
- 使用 Shebang 行:
#!/usr/bin/env -S uv run --script - 敏感信息: 密码/密钥等不要硬编码,使用环境变量或配置文件
外部库和依赖
在需要时集成第三方库,以利用专业功能或简化复杂任务。
在文件中声明和管理脚本依赖项,使用 PEP 723 等标准以提高可重复性。
# /// script
# requires-python = ">=3.13"
# dependencies = [
# "requests==2.32.4",
# ]
# ///
Python 的官方风格指南 PEP 8 建议对导入语句的顺序进行特定的约定,这可以显著提高可读性。遵循这些约定是标准做法,并且有像 Ruff 这样的现代工具来强制执行这些约定。
避免本地或库特定的导入
(可选) 最小化依赖:主要依赖标准库。
命令行参数
- 使用辅助库添加命令行参数,使脚本具有交互性和可配置性。
- 定义一个清晰的
main()函数来封装由命令行界面(CLI)触发的核心脚本逻辑。 - 推荐使用 Click 等第三方库,它提供了更直观和 Pythonic 的方式来使用装饰器创建命令行界面
- 利用参数解析进行输入验证:像 Click 这样的工具不仅适用于定义参数,还适用于在脚本边界处验证用户输入——例如,使用
click.Choice或type=int。在此处处理输入验证通常可以减少在核心逻辑函数内部深入检查类型或值时所需的繁琐 try...except 代码块,从而保持代码更简洁。
结构化数据
- 选择合适的数据结构来改进数据的表示方式。
- 使用
enum表示表示固定的选择集、状态、模式和映射输入;建议用于清晰性和类型安全,而不是原始字符串或整数,用于预定义的选择。 - 使用
dataclass表示灵活的数据记录,具有类型注解、减少样板代码和轻松添加方法;建议用于作为大多数结构化数据的绝佳默认选项。平衡了功能、可读性和易用性。 - 使用
namedtuple表示简单的、不可变的数据包,函数返回值,以及低开销的命名访问;建议用于简洁、固定的记录,其中不可变性至关重要。
改进反馈和鲁棒性
- 使用结构化日志(内置的
logging模块)而不是完全依赖print()。 - 在开发过程中使用
assert语句进行内部一致性检查。 - 改进终端输出呈现,可能使用为更丰富的界面设计的库,如 Rich。它非常适合跨不同操作系统创建美观的终端输出,支持颜色、表格、Markdown、进度条等。(你也可以用它来覆盖
logging和异常的默认处理器)
EOF
三人行, 必有我师; 知识共享, 天下为公. 本文由东风微鸣技术博客 EWhisper.cn 编写.
Python 脚本最佳实践2025版的更多相关文章
- Shell脚本最佳实践
Shell脚本最佳实践 0. 编码.缩进.文件命名和权限设置等 使用utf-8编码: 统一使用tab缩进或空格缩进,不要混用: 文件名以.sh结尾,并且统一风格: 添加可执行权限: chmod +x ...
- paip.复制文件 文件操作 api的设计uapi java python php 最佳实践
paip.复制文件 文件操作 api的设计uapi java python php 最佳实践 =====uapi copy() =====java的无,要自己写... ====php copy ...
- MySQL安装脚本最佳实践
MySQL安装脚本最佳实践 2018年9月19日 17:01 #!/bin/bash export host_ip=192.168.7.206 echo '#1.取master主机ip的后三位 ...
- python 工业日志模块 未来的python日志最佳实践
目录 介绍 好的功能 安装方法 参数介绍 呆log 参数与 使用方法 版本说明 后期版本规划 todo 感谢 介绍 呆log:工业中,python日志模块,安装即用.理论上支持 python2, py ...
- python工程化最佳实践
1.pipenv 真实环境 vs virtualenv vs pipenv 2.自定义用户模型 继承BaseUserManager和AbstractBaseUser,在settings中指定AUTH_ ...
- python编码最佳实践之总结
相信用python的同学不少,本人也一直对python情有独钟,毫无疑问python作为一门解释性动态语言没有那些编译型语言高效,但是python简洁.易读以及可扩展性等特性使得它大受青睐. 工作中很 ...
- python 语法最佳实践
1. 列表推倒 我们知道, 列表类似于数组, 列表里存储的都是对象, 所以列表中可以存储"数字","字符串" 等对象. 列表用中括号扩起, 然后逗号分隔 列表内 ...
- 制作 Python Docker 镜像的最佳实践
概述 ️Reference: 制作容器镜像的最佳实践 这篇文章是关于制作 Python Docker 容器镜像的最佳实践.(2022 年 12 月更新) 最佳实践的目的一方面是为了减小镜像体积,提升 ...
- mybatis 3.x源码深度解析与最佳实践(最完整原创)
mybatis 3.x源码深度解析与最佳实践 1 环境准备 1.1 mybatis介绍以及框架源码的学习目标 1.2 本系列源码解析的方式 1.3 环境搭建 1.4 从Hello World开始 2 ...
- Android学习之基础知识七—碎片的最佳实践
一.Android碎片(Fragment)的最佳实践——简易版新闻应用 第一步:新建FragmentBestPractice项目,在app/build.gradle当中添加:RecyclerView ...
随机推荐
- Python科学计算系列3—多项式操作
1.因式分解 例1:分解下列多项式 代码如下: from sympy import symbols, factor x, y = symbols('x y') f = 3 * x ** 4 - 2 * ...
- 1、 为什么软件开发周期总是预估的2~3倍? 2、什么是分而治之? 3、了解 WBS
1.为什么软件开发周期总是预估的2~3倍? 首先,软件开发中经常会有需求变更的情况,客户或者利益相关者可能会提出新的需求或者改变现有的需求,这就得调整计划,增加了开发时间.其次,开发人员的技术和经验也 ...
- 倍增 & Tarjan 求解LCA
什么是LCA? 假设我们有一棵树: 1 / \ 2 3 / \ / 4 5 6 对于 \(2\) 和 \(6\) 的LCA,就是最近公共祖先,即为距离 \(2\) 和 \(6\) 最近的两个节点公有的 ...
- 四十种AI编程工具,让你码字如飞
用过AI编程工具的都知道,这玩意儿虽说还有待完善,但是确实能提高效率啊,真香啊. 是这样的,最近一个同学离职,我临时接手了他的BI数据后台,我一个不会前端的人,使用AI编程工具,发送简单的指令,竟然使 ...
- P11071 「QMSOI R1」 Distorted Fate题解
题意: 给定一个序列,给定两种操作: 将一个区间异或上一个给定的值. 给定 \(l,r\) 求 \[{\large (\sum_{i=l}^r\bigcup_{j=l}^i A_j) \bmod 2^ ...
- 代码重构(OOP)-小栗子(PyQt5)
主要是为了练习下 面向对象, 不断提醒自己代码一定要写成 营销风格, 和优雅. 最近在B站上看一下关于 Python GUI 编程的内容. 恰好呢, 前不久的一个 将本地 Ecxcel 数据 发布到 ...
- CUDA简单介绍
并行计算 并行计算(parallel computing)是一种计算形式,它将大的问题分解为许多可以并行的小问题. 并行计算分为:任务并行(task parallel)和数据并行(data paral ...
- Summary of Indexing operation in DataFrame of Pandas
Summary of Indexing operation in DataFrame of Pandas For new users of pandas, the index of DataFrame ...
- python代码片段
输入分钟.秒,输出格式为: hh:mm:ss 代码实现: import datetime def convert_to_hh_mm_ss(minutes, seconds): total_secon ...
- python doc转png踩坑历程分享
首先python根据文本内容生成doc,使用的是python-docx库,使用示例如下: from docx import Document from docx.shared import Pt, R ...