Skip to content

Latest commit

 

History

History
131 lines (98 loc) · 2.79 KB

380-532047-增强_augmented_赋值_assignment_语句_statement.sy.md

File metadata and controls

131 lines (98 loc) · 2.79 KB
show version enable_checker
step
1.0
true

虚数类型

增强赋值

  • $-1$ 开方我们得到了虚数
  • 虚数和实数构成复数
    • 复数可以进行加减乘除运算
  • 数字分成三种
    • 整型
    • 浮点型
    • 虚数型
  • 都可以进行一元运算 unary
    • $+$
    • $-$
    • ~
  • 可以连运算带赋值一起做么?🤔

运算符列表

图片描述

  • 我们已经学习了其中的一些
  • $+=$ 是什么运算符呢?

增强

  • 增强赋值运算符
    • Augmented Assignment
  • x += 1
    • 等价于 x = x + 1
    • 先计算左边表达式的值
    • 然后和右操作数进行运算
    • 最后把右操作数的值修改
  • 字符串可以用+=么?

字符串增强

图片描述

  • 可以!
  • 而且左操作数在左边
  • 右操作数在右边
  • 总共有什么增强运算符呢?

增强运算符列表

  • $+=$

  • $-=$

  • $*=$

  • $/=$

  • $//=$

  • %=

  • $**=$

  • 只要有运算

  • 就有对应的增强赋值运算符

  • 从指令角度如何理解呢?

指令

图片描述

  • 有个专门的指令
  • 就地相加
  • 比先相加再赋值的效率高
  • 省去了赋值那一步
  • 类似的增强赋值指令还有什么?

原地(INPLACE)系列

图片描述

  • python中没有把+=转化为
    • 先+运算
    • 再=赋值
    • 而是建立了专门的指令
      • INPLACE_ADD
  • 其实ADD运算有的时候
    • 甚至都可以被优化掉

加法运算

图片描述

  • 这个1+1怎么就变成2了呢?
  • 去ast(抽象生成树)看看

图片描述

  • 词流组成生成树的时候还看得出来
    • 1 + 1
  • 为什么生成字节码的时候直接就变2了呢?

代码优化(optimize)

图片描述

  • 在真正编译之前
    • 先进行了一下常量加法的运算
    • 算出1+1=2
    • 就不用每次都算了
    • 这样才能提高速度
  • 如果相加的是变量呢?

变量加法

图片描述

  • 这次的变量加法没法优化(optimize)了

    • 真正完成加的是BINARY_ADD
  • 好了

    • 我们去总结吧

总结

  • 这次主要是增强运算符
    • += 之类的
    • 先运算再赋值
    • 效率比原来高
    • 能用+=
    • 就不用先+再=
  • 算术运算符我们学了不少了
    • 用运算符把两个操作数组合起来
    • 这个组合叫什么有名字吗?🤔
  • 下次再说 👋