Skip to content

Latest commit

 

History

History
361 lines (260 loc) · 6.63 KB

048-2866306-用变量赋值_连等赋值_解包赋值_unpack_assignment.sy.md

File metadata and controls

361 lines (260 loc) · 6.63 KB
show version enable_checker
step
1.0
true

变量名标识符

回忆上次内容

  • 上次我们 了解了 id 函数
    • id函数 可以得到
    • 变量对象 所引用的 唯一内存地址
s1 = "oeasy"
A = 10
  • 现在都是
    • 用 字面量(literal)
    • 给变量 赋值

图片描述

  • 可以
    • 变量
    • 给变量 赋值 吗? 🤔

变量赋值

s1 = "oeasy"
s2 = s1
print(id(s1))
print(id(s2))
print(id(s1) == id(s2))
  • 将s1的值
    • 赋给s2
  • s2 所指向的 内存地址
    • 就是s1 所在的内存地址

图片描述

图解

  • 地址是 同一个
    • 两个变量 都指向了 这个 地址
    • 完成了 变量的复制

图片描述

  • 为什么要
    • 用 变量
    • 一个变量 赋值 呢?

指向

  • 比如 要让
    • 香蕉 和 苹果 价格相同

图片描述

  • 可以 将 苹果的价格

    • 赋给 香蕉
    • 价格就一样
  • 如果 此时

    • 对s2 再赋值 呢?

重新赋值

s1 = "oeasy"
s2 = s1
print(id(s1))
print(id(s2))
print(id(s1) == id(s2))
s2 = "o2z"
print(id(s1))
print(id(s2))
print(id(s1) == id(s2))
  • 将 'o2z' 赋给 s2 后
    • s2引用的 内存地址
    • s1引用的

图片描述

再图解

  • 用变量 给变量赋值
    • 就和 用字面量 给变量赋值一样

图片描述

  • 变量复制 真的很神奇!!!
    • 也许 您 问了
    • 这 神奇在 哪儿呢?🥸

自我复制

  • 生命的基本特征
    • 就是 自我复制

图片描述

  • 变量 的 自我复制

    • 程序 的 自我复制
    • 再到 硬件载具 的 自我复制
  • 机器 逐渐 具有生命

    • 变成 具身智能
    • Embodied Artificial Intelligence

速度

  • 而且 通过软件
    • 完成复制
    • 速度 比 生物快太多了
  • 很快就会有
    • 100个副本
    • 可以干活了

图片描述

  • 甚至 矩阵
    • 完成 交互和融合
    • 速度惊人

声明变量

  • 声明 a 是个 变量
    • 并赋值为1
  • a 是个
    • 数字类型 变量
      • 引用地址
        • 9788960
      • 通过 id(a)得到
    • 地址里
      • 存的值 是1

图片描述

  • 声明 b变量
    • 并且把 a所指向变量 的 地址
    • 赋给 容器b
  • 变量b
    • 类型 与a相同
    • 引用地址 也与a相同
  • a 和 b
    • 引用 一个 地址
    • 此地址 存的值 是1
  • 如果 把2
    • 再赋给a 呢?

重新赋值

  • 对a重新赋值后
    • a 引用了 地址 (9788992)
    • b 依然引用 地址

图片描述

  • 可以 对两个变量
    • 一起 赋值 吗?

试一试

  • 动手试一试
a = b = 3
  • 可以吗?

连等赋值

  • 一行之中
    • 可以给
    • 多个变量赋值

图片描述

  • 这就相当于 两次赋值

    1. 先算边的等号
      • b = 3
      • 将 3 赋给 b
    2. 再算边的等号
      • a = b
      • 将 b 赋给 a
  • 个等号

    • 次 赋值
  • 如果 所赋的值 很大 呢?

两个等号

  • 这次
    • 所赋的值 很大
    • 不在 常用地址范围 中
    • 属于 边远地址
  • 但是
    • a和b 所指向的地址
    • 仍然 是 同一个地址

图片描述

  • 逗号分隔
    • 输出两个变量的方式叫做
    • pack
    • 打包

图片描述

  • 能否 给
    • 打好包 两个 变量
    • 不同的 值 ?

同一行 赋不同值

  • 在 等号加上逗号
    • 变量名 加上逗号
    • 要赋的值 加上 逗号

图片描述

  • 这种情况 要经过
    • unpack
    • 解包过程
    • 将(4, 5)进行解包
      • 解成 4和5
      • 分别赋给 a和b

图片描述

  • 除了 变量
    • 导入的模块 地址吗?

模块类型

import time
type(time)
  • time的类型是
    • module
    • 模块

图片描述

  • 模块 也有地址吗?

模块地址

  • import time之后
    • 观察 id(time)
id(time)
  • 模块
    • module
    • 模块 也有自己的地址

图片描述

  • 除了 变量 和 模块
    • 函数(function) 有 地址 吗?

函数 地址

id(print)
id(ord)
id(chr)
id(id)
  • 函数 也有 地址
    • 唯一标识

图片描述

  • 还有什么也有地址吗?

更多

id(range)
id(type)
id(int)
id(str)
  • 为什么 这哥几个
    • 数值 这么小?

图片描述

  • 他们 属于 什么类型 呢?

class 类型

type(type)
type(int)
type(str)
type(range)
  • 他们本身就是
    • 类型
    • type

图片描述

  • 回忆一下
    • 这个 range怎么
    • 输出ASCII码表?

黑暗森林

for num in range(0, 128):
    if num % 8 == 0:
        print()
    print(chr(num), end="\t")
  • 遍历了ascii码表

图片描述

总结

  • 这次我们 了解了
    • 变量赋值
    • 连等赋值
    • 解包赋值
  • 所有对象
    • 变量 variable
    • 模块 module
    • 函数 function
    • 类 class
    • 都有 自己所属的 类型
    • 也都 在内存中 引用 唯一位置(id)
    • 这些数字 组成了 python系统

图片描述

  • 现在 已经声明了 哪些变量 ?🤔
    • 可以 吗?🤔
  • 我们下次再说!👋