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 ...
随机推荐
- 自定义vscode 调试控制台字体颜色
"workbench.colorCustomizations": { "debugConsole.warningForeground": "#1818 ...
- ShadowSql之精简版拆分
ShadowSql拆分为精简版和易用版,项目和nuget包同步拆分 ShadowSql项目拆分为ShadowSql.Core和ShadowSql Dapper.Shadow项目拆分为Dapper.Sh ...
- ArrayBlockingQueue的poll方法底层原理
一.ArrayBlockingQueue的poll方法底层原理 ArrayBlockingQueue 是 Java 并发包 (java.util.concurrent) 中的一个基于数组实现的有界阻塞 ...
- python获取指定文件夹内文件名称
比如下图,文件夹内有若干文件,且文件夹路径:C:\Users\Administrator\Desktop\2147\1024 4行代码,解决问题 import os path = "C:\\ ...
- 一文速通Python并行计算:08 Python多进程编程-multiprocessing模块、进程的创建命名、获取进程ID、创建守护进程和进程的终止
一文速通 Python 并行计算:08 Python 多进程编程-multiprocessing 模块.进程的创建命名.获取进程 ID.创建守护进程和进程的终止 摘要: 本节介绍 Python 中 m ...
- Sentinel源码—7.参数限流和注解的实现
大纲 1.参数限流的原理和源码 2.@SentinelResource注解的使用和实现 1.参数限流的原理和源码 (1)参数限流规则ParamFlowRule的配置Demo (2)ParamFlowS ...
- Asp.net core 少走弯路系列教程(三)CSS 学习
前言 新人学习成本很高,网络上太多的名词和框架,全部学习会浪费大量的时间和精力. 新手缺乏学习内容的辨别能力,本系列文章为新手过滤掉不适合的学习内容(比如多线程等等),让新手少走弯路直通罗马. 作者认 ...
- 倍增 & Tarjan 求解LCA
什么是LCA? 假设我们有一棵树: 1 / \ 2 3 / \ / 4 5 6 对于 \(2\) 和 \(6\) 的LCA,就是最近公共祖先,即为距离 \(2\) 和 \(6\) 最近的两个节点公有的 ...
- <HarmonyOS第一课03>ArkTS语法介绍
视频链接: https://developer.huawei.com/consumer/cn/training/course/slightMooc/C101717496870909384?ha_sou ...
- 逻辑与(&)、短路与(&&)、逻辑或(|)、短路或(||)
目录 逻辑与(&).短路与(&&).逻辑或(|).短路或(||)的区别 逻辑与(&) 短路与(&&) 逻辑或(|) 短路或(||) 逻辑与(&) ...