掌握基本语法后,还需要理解一些容易混淆的程序行为:为什么代码尚未执行就报错,为什么复制数据后原记录也发生变化,为什么同一段程序换个环境便找不到文件?通过对照实例分析这些现象,可以加深对执行过程、数据表示和对象关系的理解。
一、Python 与程序运行
1.1 语法检查与运行时错误
语法检查与实际执行发生在不同阶段。直接运行普通源文件时,文件自身的语法错误通常会阻止该文件开始执行;运行时错误则可能在前面的语句已经产生结果后出现。
交互解释器按提交的代码单元处理输入。前面已经执行的操作,不会因为后续输入出现语法错误而自动撤销。判断错误影响范围时,应结合代码的提交和运行方式。
1.2 字节码与操作观察
常见的 CPython 实现会将源代码编译为字节码,再执行相应操作。标准库 dis 提供反汇编功能,可以观察源代码与字节码之间的对应关系。
这一内容可以在学习函数定义后选学,重点理解数据读取、计算和结果返回之间的联系,无须背诵具体指令。
字节码属于具体实现的细节。解释程序功能时,仍应以源代码的语言规则和实际执行结果为依据。
1.3 Notebook 的运行状态
Jupyter Notebook 的代码单元共享内核(Kernel)中的运行状态。变量是否存在、当前保存什么值,取决于已经执行过的代码,而不只取决于页面当前显示的内容。
删除单元中的赋值语句,也不会自动删除此前创建的变量。核验完整结果时,应重启内核并按顺序运行全部单元,确认结果能够由当前代码重新得到。
二、Python 代码组成与编程风格
2.1 名称是否已经建立
名称能否使用,取决于当前执行过程中是否已经建立相应绑定。某个赋值语句即使出现在源代码中,也可能因为所在分支未被执行而没有产生作用。
阅读条件结构时,除了检查哪些语句会执行,还应检查后续使用的名称是否在所有相关路径中都有定义。函数中的名称查找与作用域规则将在后续展开。
2.2 赋值目标与求值顺序
解包赋值会先计算右侧表达式,再按位置将各个元素赋给左侧目标。这一顺序可以用于交换值,也能解释为什么某些连续赋值会得到不同结果。
增强赋值会结合对象类型完成更新。对于可变对象,它可能直接修改原对象,因此不能把所有增强赋值都简单视为创建新对象。
print(scores is backup) # False2.3 文档字符串的位置与读取
文档字符串(Docstring)需要位于模块、类或函数主体的第一条语句位置,才能成为相应对象的文档。三引号也可以用于普通文本,作用取决于所在位置。
注释和文档字符串需要随程序修改同步更新。检查大模型生成的代码时,应将说明与实际条件、计算范围及返回结果对应起来,避免仅根据注释判断程序行为。
三、基本数据类型与运算
3.1 相对容差与绝对容差
常见 Python 实现中的浮点数采用有限精度的二进制表示,许多十进制小数只能近似存储。因此,计算结果可能存在微小偏差,判断数值是否足够接近时,需要结合任务允许的误差。
近似比较需要根据任务要求设定容差。相对容差衡量差异相对于数值大小的比例,绝对容差限定固定差值,尤其适合比较接近零的结果。
容差应结合数据单位、测量精度和允许误差确定。容差过宽可能接受不合理偏差,过窄则可能将正常的计算误差判断为失败。
3.2 十进制表示与计算精度
需要按照十进制规则表示和计算时,可以使用十进制数类型 Decimal。从字符串构造数值,可以避免先经过二进制浮点近似。
十进制计算也受到有效数字精度和舍入规则约束,并非所有运算都能得到精确结果。
整数、浮点数与十进制数各有适用条件。选择类型之前,应明确数据含义、计算方式与精度要求。
3.3 反向切片与默认边界
反向切片需要同时考虑起点、终点和步长。步长为负时,访问位置逐步减小,终点仍不包含在结果中。
省略终点与显式填写负索引可能得到不同结果。省略终点会采用适合反向遍历的默认边界;显式负索引则按照序列长度解释。
切片通常会将越界范围限制在有效区间内。因此,切片成功不能证明输入长度满足任务要求。
print(len(student_id) == 3) # False,不符合三位编号约定3.4 默认值与缺失判断
使用逻辑或设置默认值,会替换所有表现为假的输入。若合法数据也可能为零或空容器,就需要使用更明确的缺失规则。
字典默认值还需要区分“键不存在”和“键存在但内容为空”。
print(record["成绩"] is not None) # False,内容尚未提供3.5 统计对象与比较边界
计算结果的含义取决于统计对象。三名学生的成绩形成群体均值,一名学生的三科成绩形成个人总分与科目均分,解释时需要保留这种区别。
“高于”与“不低于”对应不同边界。选择恰好等于阈值的样例,可以检查比较规则是否被正确表达。
四、组合数据类型与对象引用
4.1 嵌套容器的复制范围
浅复制(Shallow Copy)创建新的外层容器,但内部对象仍可能共享。对于嵌套数据,需要分别检查修改发生在哪一层。
![]()
图 4-1:嵌套容器中的共享引用
内容相等不能证明对象相同,外层对象不同也不能证明内部数据完全独立。阅读复制操作时,应沿引用关系逐层检查。
4.2 深复制与局部复制
深复制(Deep Copy)会递归复制此类嵌套容器,使内部数据可以独立变化。
如果只有部分数据需要修改,也可以只复制相应的内部容器,明确隔离范围。
复制方式应结合对象类型、修改范围和资源成本选择。文件、连接等资源具有额外状态,不能简单理解为普通容器中的可复制数据。
4.3 序列重复与内部共享
序列重复操作会重复元素引用。如果元素本身是可变对象,多个位置可能引用同一个内部容器。
发现多处数据同时变化时,可以先检查它们是否引用同一个可变对象。对象共享关系取决于构造和赋值过程,不能仅凭显示内容判断。
五、模块与项目环境
5.1 安装信息与加载位置
分发包(Distribution Package)是安装工具管理的软件单元,模块是导入系统加载代码的单位。一个分发包可以提供多个模块,安装名与导入名也可能不同。
排查导入问题时,应结合解释器位置、安装信息和模块加载位置进行判断。
本地同名文件可能干扰模块查找。确认导入成功后,还应检查加载的是否为预期模块。
5.2 工作目录与脚本目录
相对路径通常以当前工作目录为参照。脚本保存在某个文件夹,并不意味着程序也从该文件夹启动。
当材料与脚本一起组织时,可以根据脚本位置构造路径,明确它们之间的位置关系。
从不同目录启动同一脚本,可以观察路径参照的差别。文件找不到时,应先确认程序实际查找的位置,再检查材料是否存在。
5.3 模块发现与导入验证
模块能够被找到、能够被导入,以及能够完成所需操作,是三个不同层次的检查。
不同开发工具得到不同结果时,可以对照解释器、工作目录和模块位置。这些信息有助于区分环境选择错误、文件命名冲突和依赖缺失。
六、大模型代码的阅读与应用
6.1 完整任务与独立预期
单条登记信息预览可以将文本清理、类型转换、容器组织和输出格式连接起来。先使用程序内的虚构材料,便于独立核对处理结果。
可以向大模型提出以下请求:
请使用 Python 编写一个登记信息整理与成绩预览程序。输入直接写在程序中:学号为 "001",姓名为 " 张三 ",数学、英语和物理成绩分别为 "85"、"90"、"88",来源文件名为 "登记表01.docx"。
学号保留为文本,姓名清除两端空白,原始记录保持不变。三科成绩转换为整数,计算总分和平均分,并按学号、姓名、数学、英语、物理、总分、均分、来源文件的顺序显示,均分保留一位小数。
仅使用 Python 内置功能,在注释中说明关键步骤和输入前提。当前假定姓名清理后非空,成绩均为零到一百的合法整数字符串。不读取、写入或覆盖文件。
运行前,先手工确定预期:学号保持为“001”,姓名整理为“张三”,总分为 263,均分显示为 87.7。来源文件名作为记录中的标识保留,不表示程序实际读取了该文件。
6.2 完整实现与数据追踪
下面的实现将原始输入与整理结果分别保存,便于对照。阅读时重点追踪类型变化、统计范围和字段对应关系。
核验时,除了总分与均分,还应检查学号前导零、姓名清理、来源标识和输出列序。列数相等只说明数量匹配,还需要确认每个值与表头含义对应。
6.3 修改范围与关联结果
先只将物理成绩从 "88" 改为 "80"。预期总分减少 8,变为 255,均分显示为 85.0;学号、姓名和来源应保持不变。
增加字段时,应先判断它是否参与计算。增加籍贯主要影响数据保存和输出;增加一门课程还会改变统计范围。
只修改显示文字,或只增加表头,都可能留下未同步更新的处理步骤。修改后应同时核对新增结果与需要保留的行为。
6.4 输入变化与失败阶段
边界练习应将输入变化与处理阶段对应起来。类型转换、业务范围和内容完整性需要分别检查。
前面的完整程序尚未自动检查成绩范围。将成绩改为 "120" 时,它仍会计算;改为空文本时,则会在整数转换阶段报错。解释清楚失败位置,才能提出有针对性的修订要求。
6.5 反馈修订与回归检查
可以将发现的问题转化为具体反馈:
将物理成绩改为 "120" 后,程序仍计算并显示了总分。成绩应在零到一百之间,预期应指出无效字段,并停止生成该条成绩结果。请补充检查,保留原始记录和学号前导零,并在注释中说明修改位置。
修订后重新检查原有功能,称为回归测试(Regression Testing)。拒绝 120 分之后,还应确认 0 分和 100 分仍被接受,正常输入的总分、均分和输出顺序保持正确。
保留修改目的、测试输入、预期行为、实际结果与未覆盖情况,可以为后续检查提供依据。完整的分支、异常处理和函数封装将在后续展开,这里先建立输入变化与程序结果之间的可检查联系。
小结
执行状态、求值顺序、数值精度与嵌套引用,会影响程序的实际行为。结合环境诊断、完整案例和修改对照,可以追踪问题来源,并通过独立预期、边界样例与回归检查核验修订结果。
“点赞有美意,赞赏是鼓励”
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.