第5周 Python 对象类型 (初级)

🔙 返回教学大纲

任务目标

上周 (初级) 我们讲过 Python 编程本质上是拼接操纵各种对象,因而在本周,我们的目标是要掌握最基础、最常用的几种 Python 对象类型 (type),包括字符串 (str)、字节串 (bytes)、整数 (int)、浮点数 (float)、布尔值 (bool)、列表 (list)、字典 (dict)、元组 (tuple)、集合 (set)。这几种类型都是 Python 解释器 内置的 (built-in),不需要任何导入 (import)。

另外,Python 标准库 (standard library) 里的 pathlibdatetime 模块 (module) 提供了用于处理 路径日期时间 的类型,也是非常基础、非常常用的。标准库模块都不需要安装 (pip/conda install),但使用前需要导入 (import)。

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

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

  3. 逐个 创建 use_of_{name}.py 文件,其中 {name} 替换为上述要求掌握的对象类型,例如 use_of_str.py:

    • 在全局作用域 (global scope) 内尝试键入 (活学活用) Python 代码,亲手验证概念 (Proof of Concept, PoC)
    • 对于任何对象,都可以传给以下内置函数 (built-in function) 用于检视 (inspect):
      • id() -- 返回对象在虚拟内存中的地址 (正整数),如果 id(a) == id(b),那么 a is b (is 是个运算符)
      • type() -- 返回对象的类型
      • isinstance() -- 判断对象是否属于某个 (或某些) 类型
      • dir() -- 返回对象所支持的属性 (attributes) 的名称列表
      • str() -- 返回对象 print 时要显示在终端的字符串
    • 可以调用 print() 函数将表达式 (expression) 输出到终端,查看结果是否符合预期
    • 可以利用 assert 语句查验某个表达式 (expression) 为真,否则报错 (AssertionError) 退出
    • 可以利用 try 语句拦截报错,避免退出,将流程 (flow) 转入 except 语句
    • 可以调用 breakpoint() 函数暂停程序运行,进入 pdb 调试 (debug) 模式
  4. 对于 每一个 上述要求掌握的对象类型 (将来遇到新的对象类型也应该如此),我们首先应该熟悉如何通过 表达式 (expression) 得到他们的 实例 (instance),一般包括以下途径:

    • 字面值 (literal) (包括 f-string 语法)
    • 推导式 (comprehension) (仅限 listdictset)
    • 初始化 (init)
    • 运算值 (operator)
    • 提取值 (subscription)
    • 返回值 (return value of function/method call)
  5. 对于 每一个 上述要求掌握的对象类型 (将来遇到新的对象类型也应该如此),我们也要尝试验证其以下几个方面的 属性 (attributes):

    • 对数学运算符 (+-***///%@) 有没有支持
    • 如何判断相等 (==)
    • 对于比较运算符 (><>=<=) 有没有支持
    • 什么值被当作 True,什么值被当作 False
    • 是否可迭代 (iterable),如何做迭代 (for 循环)
    • 是否支持返回长度 (len)
    • 是否 (如何) 支持提取操作 (subscription) ([] 运算符)
    • 拥有哪些常用方法 (method) 可供调用 (() 运算符)

    建议先在 pdb 里试验,然后把确定能够运行的代码写在 use_of_{name}.py 文件里

  6. 将你学习理解实践这些概念所产生的笔记,以及运行用的 .py 代码,都 addcommitpush 到 GitCode 平台你名下的仓库里,最后提交 PR

注意事项

  1. 本周讲到许多抽象概念,比如 “表达式”、“对象”、“类型”、“实例”、“字面值”、“初始化”、“提取值”、“可迭代” 等等。很多同学会觉得抽象概念难以理解,我们的建议是通过 例子 来理解和把握 抽象,这个道理和学习 数学 是一样的。录播里会讲到各种具体类型,都是这些抽象概念的例子。也有很多同学会觉得抽象概念没什么用,这其实是非常大的误解。如果只学习各种具体类型,不把握抽象概念,就会深入茫茫大海中不能浅出,不能举一反三、触类旁通,会学得很痛苦。这个道理也和学习 数学 是一样的,抽象数学才有泛化 (generalize) 能力,能够让洞见在学科之间迁移。录播尝试通过具体例子来讲解抽象概念,一旦同学们能够理解和把握住 抽象,那么将来遇到任何新的具体类型,都将能够轻松掌握。

  2. Python 语言的概念明显要比 Stata、SAS、R、Matlab 等语言多。后者只是特定领域 (domain-specific) (比如计量、统计、数值计算) 的语言,而前者则是一般意义 (general-purpose) 上的编程语言。现在人们使用计算机已经越来越不满足于被限定在特定领域,而是需要将来自多种不同系统、平台或服务的数据进行 集成。未来人们的工作也很有可能转向为:基于自己的专有知识或数据,开发提供 “微服务” (micro-service),融入世界范围的 “云计算” (cloud-computing) 体系,收取服务费 (软件即服务,Software as a Service,SaaS) 作为劳动和智力的报酬。金融服务未来会 (还是已经?) 演变为云服务模式,所以金融学子只掌握统计语言 (数据分析,Data Analysis) 是不够的,必须学习更多的、更一般的编程概念,掌握数据工程 (Data Engineering) 的能力。

  3. 计算机的虚拟世界远比现实世界更为丰富多彩和迷人。现实世界只有一个,虚拟世界却可以有无数个;现实世界受到各种客观规律的制约,虚拟世界里我们自己扮演 “造物主”,自己创造概念;虚拟世界在开源协作的浪潮下,更是不断加速地在推陈出新。我们认为,掌握 Python 的 “对象” 思维,可能是进入这个虚拟世界最佳的入场券。

操作演示

浏览器观看 手机扫码观看
Part 1. 常用的对象检视函数和语句
主要围绕Python对象类型、代码管理和调试、工具函数使用以及基础工具函数等方面进行了深入讲解。首先,课程大纲进行了调整,取消了之前的三章,将Python的内容作为专题进行深入讲解。其次,介绍了如何使用GitHub进行代码管理和克隆,并创建一个专用的环境并进行练习。接着,讲解了几个有用的函数,如ID、type、isinstance和dir,并通过实例演示了不同类型的对象在内存中的地址是不同的。然后,介绍了如何通过编程来验证和理解对象ID和类型的概念,并使用assert语句和try-except语句进行代码调试。最后,强调了在掌握基础概念后,通过练习和实践来提高编程能力。(智能总结由机器自动生成,仅供参考)
二维码
Part 2. 获得 str 类型实例的几种途径
讨论了如何通过表达式获取对象实例,验证对象属性和方法,以及字符串字面值、推导式初始化、运算值、索引值等概念在Python中的应用。首先,介绍了各种类型的对象获取方法,如字面 value、推导式 initialization、运算value、索引value等,并强调了验证对象属性的重要性,包括数学运算符支持、判断相等于、比较大小、可迭代性等方面。其次,详细讲解了字符串字面值的概念和应用,包括单引号、双引号、反斜杠加换行符等表示方法,并介绍了字符串的特性。接着,阐述了字符串推导式和初始化的概念,以及如何使用assert进行代码验证。最后,讨论了字符串的索引值、返回值和不可修改性,强调了创建新实例时不会改变原实例,以及在遇到类型错误时的处理方式。(智能总结由机器自动生成,仅供参考)
二维码
Part 3. str 类型支持的各种操作和方法
讨论了字符串的运算符、相等性、比较大小、编码、排序规则、迭代器、可迭代对象、翻译方法、内置方法和标识符判断等内容。首先,字符串支持加、减、乘、除、比较、赋值等运算,并且可以通过运行会报错的除法来验证其相等性。其次,一个字节可以表示256种不同的状态,而字符编码有ASCII码等多种标准。在排序规则上,小写字母比大写字母排在前面,数字比字母排在前面。此外,还介绍了translate和make_translation两个函数,以及capitalize、center和count等常用方法。最后,通过使用isalpha、isdigit、isidentifier等内置函数,可以快速判断一个字符串是否为字母和数字的组合,并且可以作为标识符。(智能总结由机器自动生成,仅供参考)
二维码
Part 4. bytes 编解码和 int 整数
讨论了整数的概念和用法,以及如何在编程中处理整数对象。会议强调了在处理较大整数时,需要占用较多的字节存储,因此需要在代码中进行相应的优化和调整。(智能总结由机器自动生成,仅供参考)
二维码
Part 5. float ~ dict 等类型
主要讲解了浮点数、布尔值、列表、字典等编程概念的用法和操作。首先,浮点数可以通过直接使用或字符串初始化方式得到,需要注意四舍五入的误差。其次,布尔值在Python中是一种特殊的整数,可以用于判断真假。然后,列表是一个容器,支持多种运算符,但与数学中的实数运算规则可能不同。接着,字典是一种散列表,没有顺序,可以存放更多的数据,但占用的内存比列表高。最后,哈希值、字典和循环在加密算法和区块链中有应用。总体来看,这些概念在编程中都有其特定的用途和操作方法,需要掌握。(智能总结由机器自动生成,仅供参考)
二维码
Part 6. tuple ~ date 等类型
讨论了元组和列表的区别,不可修改的元组和字典的特性,集合的概念和运算,EDR的使用,文件后缀、路径和属性的处理,日期时间的使用和格式化,以及如何正确使用Python进行金融分析。首先,强调了元组在某些情况下的优势,如不会造成资源浪费和效率降低。其次,介绍了字典的特性,如不可修改的元组可以作为字典的键,并且具有较高的排序和查找性能。接着,讲解了集合的并集、交集和对称差等运算,以及如何使用Python处理文件后缀、路径和属性等问题。此外,还介绍了日期时间的使用方法,包括datetime模块的引入、date和time类、日期时间的格式化编码和解析等。最后,强调了金融学院的同学应该以正确态度使用Python,而不是去发明它。(智能总结由机器自动生成,仅供参考)
二维码

同学贡献

参考资料


🔙 返回教学大纲