环境、语法与代码风格¶
本篇建立可复现的运行环境,并介绍 Python 3.10+ 最常用的语法和工程约定。
选择解释器¶
优先从 Python 官方发行版、操作系统包管理器或可信环境管理器安装。 确认实际运行的是预期解释器:
在同一台机器上可能同时存在多个 Python。 使用python -m pip 比直接执行 pip 更可靠,因为它明确绑定当前解释器。
不要使用管理员权限向系统 Python 随意安装项目依赖。
隔离依赖的方法见文件、路径、标准库与虚拟环境。
三种运行方式¶
交互模式适合实验:
脚本适合保存和复用: 模块方式可正确建立包上下文: 运行包内代码时,通常优先python -m,不要依赖当前工作目录偶然可导入。
源文件与入口¶
Python 3 源文件默认使用 UTF-8。现代代码通常无需编码声明。 可执行模块常使用入口保护:
导入模块时,模块级语句仍会执行,但入口保护中的代码不会执行。 因此避免在导入阶段发网络请求、解析命令行或执行耗时工作。缩进与语句块¶
缩进属于语法。使用 4 个空格,不混用 Tab:
冒号开始一个语句块。空块可临时使用pass:
一行写多个语句虽合法但不利于阅读,应避免分号拼接。
名称与赋值¶
标识符区分大小写,可包含字母、数字和下划线,但不能以数字开头。 不要覆盖内置名称:
赋值是名称绑定: 支持解包与交换: 右侧会先求值,再完成左侧绑定。行连接与括号¶
优先利用圆括号、方括号或花括号进行隐式续行:
反斜杠续行脆弱,尾随空格也会导致问题,通常不推荐。 相邻字符串字面量会自动拼接: 变量字符串不能依靠相邻写法拼接,应使用+、join() 或 f-string。
注释与文档字符串¶
注释解释原因、约束或不明显的权衡,而不是逐字复述代码:
模块、公共类和公共函数可使用文档字符串: 文档字符串是运行时对象,可由help() 和文档工具读取。
字面量¶
整数支持不同进制和分隔符:
字符串可用单引号、双引号或三引号。原始字符串减少反斜杠转义: 原始字符串仍不能以单个反斜杠结尾,也不是“完全不处理转义”的任意字节表示。None 表示缺失或无返回值,判断时使用身份比较:
表达式与语句¶
表达式产生值,如 2 + 3、函数调用和列表推导式。
语句组织控制流程或绑定名称,如 if、for、def、class、import。
赋值表达式 := 可复用刚计算的值,但不应牺牲可读性:
= 本身不是表达式,不能放在条件中。
输入与输出¶
input() 总是返回字符串,并在读取失败时可能抛出 EOFError:
print() 适合交互输出,不应代替长期运行程序的日志系统:
日志基础见文件、路径、标准库与虚拟环境。
命名约定¶
- 模块和包:
lowercase_name。 - 函数和变量:
snake_case。 - 类和异常:
CapWords。 - 常量:
UPPER_CASE,这是约定而非运行时只读。 - 内部实现:前导单下划线,如
_cache。 - 避免自创双下划线结尾名称,以免与特殊方法冲突。
名称应表达业务含义。循环索引可使用
i,但跨越较长逻辑时应改为明确名称。
PEP 8 与自动化工具¶
PEP 8 是通用风格指南,项目自身约定可以更具体。 不要手工争论可自动处理的格式问题。 Ruff 是第三方工具,需要安装:
工具配置应由项目统一管理。学习示例中也应保持一致缩进、合理行长和清晰导入。导入风格¶
导入通常按标准库、第三方库、本地包分组:
requests 是第三方库,使用前必须安装:
避免 from module import *,它会污染命名空间并让来源不清晰。
模块和包机制见后续专题。
最小调试方法¶
先观察类型和可重现表示:
临时断点可使用标准库: 默认会进入pdb。生产代码提交前应删除无意保留的断点。
常见环境问题¶
ModuleNotFoundError:确认使用的解释器、虚拟环境和安装命令一致。- 文件找不到:确认当前工作目录,不要误认为它等于脚本所在目录。
- 乱码:确认文本编码,明确使用 UTF-8,不要对任意二进制强制解码。
- 命令找不到:检查 PATH,Windows 可尝试
py启动器。 - 导入到错误模块:检查当前目录是否存在与标准库同名的文件,如
json.py。
小结¶
可靠的 Python 程序从可确认的解释器、清晰的入口和稳定的代码风格开始。 下一篇将深入对象、可变性、文本、字节和内置容器。