-对象 Lecture 6 - Objects
Lecture 6: Objects in Python
看透 Python 对象的身份、可变性与属性查找机制
按 空格/→ 演示下一步
全部页面点击任意一页,跳回舞台从这页播放
Lecture 6: Objects in Python
看透 Python 对象的身份、可变性与属性查找机制
什么是Python对象
上一讲我们走进了 Python 的对象世界。但「对象」到底是什么?想想你从快递柜取包裹的动作——看编号、读面单、查内容,三件事就是答案。
编号对应 id(),面单对应 type(),内容物对应 value;连面单本身也是一张包裹
为什么对象如此重要
上一页我们看到,对象把数据和方法捆在一起,像一个独立的小盒子。这看似简单,但为什么这种设计能让 Python 撑起从脚本到百万行系统的复杂度?关键在于它提供了一种统一的组织方式。
不用知道电视是哪个牌子,按开关键都能开机;调用对象方法不需要懂内部实现
元组的定义与创建
超市购物清单能划掉、能加东西;但快递面单一旦打印就不能改。元组就是 Python 里这种'定下来就不能动'的序列。
一旦公布就定格,选手名次不能改
元组的索引与切片
通过一段完整运行代码,看清元组能做什么、不能做什么。
前几行展示元组和字符串、列表一样可索引、可切片、可拼接;最后一行才是重点——一旦尝试赋值,立即抛 TypeError,这正是 immutable 的字面含义。
元组解包实战
从变量交换到函数返回值,元组解包让一行代码顶三行。
解包要求左右元素数匹配;* 可吸收多余元素;函数返回元组时直接对应多个变量;嵌套结构可逐层拆开,_ 丢弃不关心的值。
列表的本质
元组一旦创建就无法改动,但现实里大量数据需要随时增删改。列表就是为这种「会变」的需求而生的结构——同样的索引语法,却换来了「原地修改」的自由。
白板可擦写新内容对应列表的原地修改;印好的书对应元组,一经出版就定型
列表的创建与访问
演示方括号创建列表与整数下标取值,覆盖负索引与越界两种边界。
方括号把元素聚成 list 对象;下标从 0 起,负数反向计数,越界抛 IndexError;列表可变——这些行为都源自「list 是对象」。
列表内存模型图解
列表对象本身是一段连续槽位,存放的不是元素本身,而是指向其他对象的引用指针。
添加元素操作
添加元素是列表最常用操作,但 append、extend、insert 各有适用场景。
删除元素操作
Python 列表删除元素有三种语法,按「知不知道索引」和「要不要返回值」选择。
列表切片高级操作
展示步长、负索引、切片赋值与删除的进阶用法。
步长决定方向与跳跃;切片赋值长度可变,是原地修改列表的关键武器。
列表常用方法汇总
通过真实运行展示列表的查询、排序、反转方法,重点区分原地操作与返回新对象的差异。
高亮行展示三类操作:index/count 用于查询不修改列表;sorted 返回新列表而 sort/reverse 原地修改;sort(key=...) 通过自定义键实现大小写无关排序。
函数是一等公民
你已经用过无数次的 len()、print(),它们是函数。换一个角度:函数本身在 Python 里和数字、字符串一样,可以被赋值、被传来传去——这叫'函数是一等公民'。
42 能赋值、传参、能作返回值,函数完全一样
函数对象的生命周期
从 def 到 GC,沿箭头看函数对象在内存里的生灭。
高阶函数实战
用 map/filter/reduce 处理商品数据,展示函数式流水线思维。
lambda 是匿名单表达式函数;map 变换、filter 筛选、reduce 累积,三者串联就是函数式流水线。
字典的核心概念
列表用整数下标找位置,但现实里大量查询是「按名字找东西」,不是「按编号找位置」。字典正是为标签查找而生,核心机制有两条:键值对结构存储数据,哈希表负责按 key 一步定位。
取件码算出一个格号,直接开柜,不用挨个翻
字典的创建与访问
对比 [] 与 get() 两种访问方式,看 KeyError 的陷阱与 get() 的安全默认值。
花括号 {} 是字典字面量;[] 访问快但缺键会炸,get() 是安全网,能塞默认值兜底。
字典的增删改查
字典日常使用就是查、增、改、删四件事,按工作流串起来讲最省脑。
字典方法与迭代
演示 keys/values/items 三种视图与字典推导式
keys/values/items 返回的是动态视图;推导式用花括号,可加条件或交换键值。
核心要点回顾
- ✓数据固定用元组,顺序可变用列表,按键查找用字典
- ✓Python 万物皆对象,函数也是对象,可被传递和赋值
- ✓可变与不可变是设计接口的真正分水岭
- ✓高阶函数的本质是把函数当数据在函数间流转
自我检测
元组、列表、字典、函数这四种对象,下列哪种操作对它们全都合法?
课后思考
先独立思考,再对照参考答案展开讨论。
参考答案Python的“对象”指有类型、身份、值的内存实体;OOP的“对象”特指类的实例。前者范围更广。
参考答案能。这就是闭包:内层函数会“捕获”外层作用域的变量,外层返回后这些变量依然存活被引用。
参考答案列表可变、不可哈希,作为键会报错;元组不可变、相同内容的元组哈希值一致,因此能作键。