第4周 Python 程序开发 (初级)

🔙 返回教学大纲

任务目标

数据在不通电的情况下可以长期持久地 (persistently) 存储在 磁盘 (如固态硬盘 SSD、机械硬盘 HDD) 或磁带 (常用于数据备份、长期归档) 里。但在需要呈现 (print、render、show、display、play)、计算加工 (compute、transform、analyze、machine learning、deep learning) 或编解码 (encode、decode) 时,就需要通电的 CPU内存 (硬件),在操作系统 (软件) 里以 进程 (process) 为单元 (相互隔离) 进行处理。例如,Microsoft Word 启动后就是一个进程,我们在 Word 进程里打开某个 .docx 文档,将其从磁盘加载 (读取) 到内存,然后在图形界面 (GUI) 里查看和编辑 (计算) 内存中的文档,最后将内存数据保存 (写入) 到磁盘。同理,Python 解释器 (interpreter) 启动后也是一个进程,她按照流程 (flow) 执行我们准备好的 Python 代码,根据我们代码的要求,转告 (即 调用, call) 操作系统或其他软件 (即 依赖项, dependency),委托她们替我们执行各种 “读取——计算——写入” 等工作。我们并不需要完全理解依赖项内部的工作细节 (黑箱),只需要清楚每个调用的主体 (即 对象, object) 是什么 类型 (type),每个调用的输入 (即 参数, parameter/argument)、输出 (即 返回值, return value) 是什么类型,以及调用会对内存数据、磁盘文件做什么修改,就足以支持我们自动批量地完成工作了。

本周我们的目标是初步理解 Python 程序开发中 变量 (variable)、函数 (function)、对象 (object)、类型 (type)、属性 (attribute)、方法 (method)、调用 (call)、形参 (parameter)、实参 (argument)、返回值 (return value) 等等基本概念。我们要明白,Python 编程本质上是拼接操纵各种对象 (这也是 Python 为什么被称为 “胶水语言”)。我们将运用 pdb 调试器 (debugger) 这个关键的开发工具,结合案例来讲解这些概念。

  1. Fork 第04周打卡 仓库至你的名下,然后将你名下的这个仓库 Clone 到你的本地计算机

  2. 用 VS Code 打开项目目录,新建一个 environment.yml 文件,指定安装 Python 3.12,然后运行 conda env create 命令创建 Conda 环境

  3. 新建一个 contacts.txt 文件,每行写一个联系人,每个联系人都包含姓名、性别、邮箱三个字段,用空格分隔,例如

    白展堂 男 baizhantang@163.com
    佟湘玉 女 tongxiangyu@163.com
    吕轻侯 男 lvqinghou@126.com
    郭芙蓉 女 guofurong@126.com
    李秀莲 男 lixiulian@163.com
    祝无双 女 zhuwushuang@163.com
    

    建议活学活用,改换其他例子 (甚至是一些极端情况) 测试程序的稳健性

  4. 新建一个 main.py 文件,里面写 Python 代码,要求读取 contacts.txt 文件的内容,进行数据处理后,输出一个 emails.txt 文件,例如

    to: <guofurong@126.com>
    尊敬的郭芙蓉女士,您的会员资格即将到期,请及时续费。
    ---
    to: <lvqinghou@126.com>
    尊敬的吕轻侯先生,您的会员资格即将到期,请及时续费。
    ---
    to: <baizhantang@163.com>
    尊敬的白展堂先生,您的会员资格即将到期,请及时续费。
    ---
    to: <lixiulian@163.com>
    尊敬的李秀莲先生,您的会员资格即将到期,请及时续费。
    ---
    to: <tongxiangyu@163.com>
    尊敬的佟湘玉女士,您的会员资格即将到期,请及时续费。
    ---
    to: <zhuwushuang@163.com>
    尊敬的祝无双女士,您的会员资格即将到期,请及时续费。
    

    要求输出是先按邮箱域名排序 (126.com 排在 163.com 之前),然后再按邮箱用户名排序 (guofurong 排在 lvqinghou 之前)

  5. 可以将以上 “任务要求” 的文本,复制粘贴到大模型 (比如豆包、DeepSeek) 里,请 AI 来帮助编写程序初稿

  6. AI 回复的只是静态代码,而且可能含有错误,所以我们必须在 Conda 环境里运行代码,逐行调试,检查每一行代码的运行都符合我们的期望 (越是初学者越应该慢慢调试、检查、试验,借此学习)

    • 将大模型提供的代码复制粘贴进 main.py 文件,记得保存
    • 在 VS Code 扩展商店里安装 Python 扩展,使得在编写 .py 文件时能够显示和选择 Python 解释器 (需要绕过防火墙)
    • 在 VS Code 扩展商店里安装 Ruff 扩展,按照文档配置 Ruff,实现在保存 .py 文件时能够自动规范化 Python 代码
    • 运行 python main.py 命令 (作用是启动 Python 解释器,执行 main.py 里的代码直至结束 (EOF) 或报错 (Exception)),检查运行结果是否符合预期
    • 运行 python -m pdb main.py 命令 (作用是以调试模式 (debug mode) 启动 Python 解释器,准备执行 main.py 里的代码)
    • (pdb) 提示符下练习使用 l (显示代码)、n (执行当前行)、p (打印表达式)、s (步入调用)、pp (美观打印)、c (继续执行) 等命令 (参考文档)
    • 在调试过程中,利用 wat-inspector (第三方软件包,需要安装) 检查 (inspect) 各种对象 (参考文档)
    • 在调试过程中,观察代码逐步运行的效果,学习理解以下 Python 基本概念 (建议观看下面的录播讲解)
      • Python 语法保留字 (reserved key words)
      • 语句 (statement) 和表达式 (expression)
      • 缩进 (indent)
      • 局部变量 (local variable)、全局变量 (global variable)、LEGB 规则
      • 函数 (function) 的定义 (define) 和调用 (call)
      • 字面值 (literal) (字符串 (str)、整数 (int)、列表 (list)、字典 (dict)、元组 (tuple))
      • 运算符 (operator)
      • 形参 (parameter)、实参 (argument)、返回值 (return value)
      • 对象 (object)、类型 (type)、属性 (attribute)、方法 (method)
  7. 将你学习理解实践这些概念所产生的笔记,以及试验性的代码,都 addcommitpush 到 GitCode 平台你名下的仓库里,最后提交 PR

注意事项

  1. 大模型的确已经能够按照我们的要求生成文章、代码,而且无疑还在更加快速地变得更加强大。但人类的分工在无限深化,人类的定制化需求永无止境,永远需要我们人类自己来解决更多的创新性问题。是的,创新,因为不创新的常规问题都可以自动化了。所以我们不要以为 “大模型都可以写代码了,我们就不用再学习编程了”,相反,我们不仅要学 (学已经变得很容易),而且还要能创新,学习的压力反而更大了。真正 创新的文章、代码是不一样的,是有灵魂的。尽管大模型能够生成,但在这里我写下的每一个字,我都不希望是由大模型生成的,我都希望由我自己来写。我所编写的每一行代码,我都更愿意由我自己来写,大模型顶多作为一个助手 (Copilot),一个学习的帮手,我还是希望最终由我亲手掌控,因为我做的是做前所未有的创新工作。—— 这就是我所预见的人类和大模型 (AI) 相处的哲学关系。

  2. 计算机这个虚拟世界里,概念 (尤其是新概念) 是非常非常多的,不要指望能先把概念学完然后才工作。就像你并不需要读完整本牛津英汉大词典,就应该尽早去实际使用英语,要 “干中学” (learning by doing)。经典概念可以问大模型,但新概念还是要读官方文档 (documentation),甚至先不学都可以,全靠直觉 (intuition) 去连蒙带猜理解概念都行。大模型可能有幻觉,官方文档也可能不对 (软件 bug),书本网页可能过时,老师讲的也很可能有错,实践是检验真理的唯一标准,所以一定要亲手验证概念 (Proof of Concept, PoC),走上成长之路。

  3. 要慢,慢就是快。学开车要慢,学太极拳要慢,学书法要慢,都是这个道理,调试 (debug) 也要慢。熟练了自然就能快。工具再怎么发展、再怎么先进、再怎么方便,终究还是要人来操作 (著名的 “自动化悖论”,我不相信 “通用人工智能” (AGI)),所以我们需要经过长时间的慢慢练习,逐渐地越来越熟练地操作计算机 (编程,不是点鼠标)。

操作演示

浏览器观看 手机扫码观看
Part 1. 极简版计算机组成原理与操作系统
主要讲解了计算机工作原理、操作系统、Python解释器、编程基本概念和AI编程等多个方面的内容。首先,详细介绍了计算机的工作流程,包括数据存储、呈现、计算加工、编解码等,并强调了CPU、内存和进程的协同工作。其次,以微软Word为例,解释了进程的概念及其在操作系统中的应用,同时提到了文档的持久性。接着,讲解了Python解释器的工作原理和编程基本概念,包括变量、函数、对象、类型、属性、方法等。然后,介绍了如何使用VSCode新建项目目录并创建环境,以及如何编写一个需要读取两个文件并进行数据处理的程序。最后,阐述了AI编程的原理和应用,强调了通过逐行调试来检查代码的正确性,并对初学者进行了实战演练。(智能总结由机器自动生成,仅供参考)
二维码
Part 2. 人类如何面对 AI 编程
讨论了AI生成代码和Python扩展的使用,以及人类在编程中的重要性。首先,介绍了如何保存和修改AI生成的代码,安装和卸载Python扩展,并强调了在安装和使用过程中需要注意的设置和配置。其次,讲述了用户设置的图形化界面,通过修改配置文件来设定Python解释器,以及如何使用Rough插件自动帮助文本编辑器进行代码规范,提高代码的可读性。此外,还介绍了如何在Python编程过程中检查和修复语法错误,以及在命令行和VS Code中切换工作目录和运行测试。最后,强调了尽管AI可以生成代码,但人类仍然需要自己编写具有创新性的代码,并提出了对自动化工具的合理使用方式。(智能总结由机器自动生成,仅供参考)
二维码
Part 3. 运用 pdb 检查程序的内部运行
主要讲解了Python代码调试过程中的作用和常用命令,以及如何使用Python的调试工具LL进行代码查看和变量打印。同时,也介绍了如何在Python编程中运行函数、输出结果、处理文件结构等基本操作。此外,还讲解了如何使用内置函数如len、type等进行快速调用,以及如何进行流程控制,如使用try和with语句。最后,通过实例演示了如何在代码中逐步运行,理解其中的函数定义和执行过程,并强调了在编程过程中需要不断验证概念。(智能总结由机器自动生成,仅供参考)
二维码
Part 4. Python 基础概念与对象检视
讨论了Python中的基本概念,如保留字、语句、表达式、缩进、局部变量和全局变量的使用,以及模块的概念和区别。同时,还介绍了如何安装和使用第三方软件包"wat-inspector",并通过实例详细解释了这些概念。在讲解过程中,强调了Python语法保留字的重要性,以及在代码中正确使用缩进和局部变量的重要性。此外,还讲解了全局变量的定义和作用,以及如何通过import语句导入模块。最后,布置了一个练习任务,要求大家在完成学习后提交PR,以便将笔记和修改的文件一起提交到平台上。(智能总结由机器自动生成,仅供参考)
二维码

同学贡献

参考资料


🔙 返回教学大纲