show | version | enable_checker |
---|---|---|
step |
1.0 |
true |
-
$-1$ 开方我们得到了虚数 - 虚数和实数构成复数
- 复数可以进行加减乘除运算
- 数字分成三种
- 整型
- 浮点型
- 虚数型
- 都可以进行一元运算 unary
$+$ $-$ - ~
- 可以连运算带赋值一起做么?🤔
- 我们已经学习了其中的一些
-
$+=$ 是什么运算符呢?
- 增强赋值运算符
- Augmented Assignment
- x += 1
- 等价于 x = x + 1
- 先计算左边表达式的值
- 然后和右操作数进行运算
- 最后把右操作数的值修改
- 字符串可以用+=么?
- 可以!
- 而且左操作数在左边
- 右操作数在右边
- 总共有什么增强运算符呢?
-
$+=$ -
$-=$ -
$*=$ -
$/=$ -
$//=$ -
%=
-
$**=$ -
只要有运算
-
就有对应的增强赋值运算符
-
从指令角度如何理解呢?
- 有个专门的指令
- 就地相加
- 比先相加再赋值的效率高
- 省去了赋值那一步
- 类似的增强赋值指令还有什么?
- python中没有把+=转化为
- 先+运算
- 再=赋值
- 而是建立了专门的指令
- INPLACE_ADD
- 其实ADD运算有的时候
- 甚至都可以被优化掉
- 这个1+1怎么就变成2了呢?
- 去ast(抽象生成树)看看
- 词流组成生成树的时候还看得出来
- 1 + 1
- 为什么生成字节码的时候直接就变2了呢?
- 在真正编译之前
- 先进行了一下常量加法的运算
- 算出1+1=2
- 就不用每次都算了
- 这样才能提高速度
- 如果相加的是变量呢?
-
这次的变量加法没法优化(optimize)了
- 真正完成加的是BINARY_ADD
-
好了
- 我们去总结吧
- 这次主要是增强运算符
- += 之类的
- 先运算再赋值
- 效率比原来高
- 能用+=
- 就不用先+再=
- 算术运算符我们学了不少了
- 用运算符把两个操作数组合起来
- 这个组合叫什么有名字吗?🤔
- 下次再说 👋