Skip to content

Latest commit

 

History

History
184 lines (121 loc) · 4.54 KB

103-531782-元组_运算_封包解包.sy.md

File metadata and controls

184 lines (121 loc) · 4.54 KB
show version enable_checker
step
1.0
true

列表 - 嵌套 embedded

回忆

  • 上次我们深入了解了元组
    • 元组不可变指的是
      • 为元组对象分配了空间后
      • 元组对象就不再改变
    • 元组变量指的是
      • 引用元组常量的变量名
  • python中有三种不可变(immutable)的对象类型
    • 数字
    • 字符串
    • 元组

图片描述

  • 元组是不是绝对不可变呢?🤔

世事无绝对

  • 构造

图片描述

  • 不是说tuple是一种内建的不能修改(immutable)的序列么?
  • 那这个东西应该怎样理解呢?

图示

  • t 是一个元组 有两个元素构成
    • 第零个元素 t[0] 是一个列表
    • 第一个元素 t[1] 是一个元组

图片描述

  • 元组的是第0个元组项是列表
    • t[0] = [1, 2]
  • 列表是mutable的
    • 是可以修改的
    • 把这个列表里面的第0个元素修改为"a"

图片描述

  • 修改的不是元组的元组项
    • 第0个元组项还是引用原来列表地址
    • 没有被修改
  • 列表本身的列表项可以被修改
    • 上图中红框的位置
  • 修改的是列表的元素
    • 修改的不是列表
  • 那如何理解修改的不是列表呢?

不能修改的理解

图片描述

  • 元素第零个元素指向这个列表
    • 指向的这个列表可以修改(append、remove...)
  • 但是指向的这个列表的这个事情本身不能修改
    • 指向的地址和类型不能修改

图片描述

  • 1, 2
    • 这种情况算什么呢?

观察

图片描述

  • 只有逗号
    • 也会被自动封包成是元组
    • 这常常被用来进行多个变量的赋值

图片描述

  • 这种赋值叫做什么赋值呢?

回忆赋值

  • 一般赋值(assignment)
    • a = 1
  • 链式赋值
    • a = b = 1
  • 增强赋值(augmented assignment)
    • a += 1
  • 平行赋值(parallel assignment)
    • a, b = 0, 1

图片描述

  • 可以用列表进行平行赋值吗?

列表平行赋值

  • 实验列表

图片描述

  • 确实是可以的
  • 如何理解呢?

图片描述

  • 右边经历了一个类型转化的过程
    • 解包unpacking
    • 解构destructuring
  • 但是如果等号前后变量数量不一致
    • 怎么办呢?

不等解包

图片描述

  • 前后数量不一致就不行
  • 前后都经历了一个 unpack 的过程
  • 前后 unpack 出的变量数量要相等
  • 才建立对应关系
  • 不能出现二桃杀三士的情况

图片描述

  • 元组也可以进行加法和乘法的运算吗

计算

图片描述

  • 元组可以进行加法和乘法计算
  • 计算的结果还是元组

省略写法

  • 有个逗号就会自动封包

图片描述

  • 有了个逗号
  • 意味着这就是一个元组

详细过程

图片描述

  • 这就是计算的分解过程
  • 元组可以嵌套么?

嵌套的多维元组

图片描述

  • 元组是支持嵌套的
  • 而且嵌套的元组也可以用索引来定位
  • 做个练习

图片描述

练习

图片描述

  • 默认的逗号对应的不是列表
  • 而是元组

总结

  • 上次我们总结了元组运算
  • 有时候
    • 一个逗号就构建一个元组
    • 元组也有加法和乘法运算

图片描述

  • 元组还有什么应用场景呢?🤔
  • 下次再说 👋