Loading...
墨滴

瀋凣

2021/04/29  阅读:29  主题:极简黑

python笔记09

Python Day09

1.短路逻辑

思考:

#表达式结果为多少
>>> (not 1or (0 and 1or (3 and 4or (5 and 6or (7 and 8 and 9)
4
#为什么结果是4?

因为andor这两个运算符都要遵从短路逻辑。那什么是短路逻辑呢?

1.1 概念

短路逻辑的核心思想:从左往右,只有当第一个操作数的值无法确定逻辑运算的结果时,才对第二个操作数进行求值
对于and运算符来说,若第一个条件为假则整个表达式已经为假,此时第二个条件不执行。
对于or运算符来说,若第一个条件为真则整个表达式已经为真,此时第二个条件不执行。

举个栗子:

>>> x
Traceback (most recent call last):
  File "<stdin>", line 1in <module>
NameError: name 'x' is not defined
>>> 0 and x
0
>>> 0 or x
Traceback (most recent call last):
  File "<stdin>", line 1in <module>
NameError: name 'x' is not defined
>>> 6 and x
Traceback (most recent call last):
  File "<stdin>", line 1in <module>
NameError: name 'x' is not defined
>>> 6 or x
6

2.赋值运算符

运算符 描述 实例
= 简单的赋值运算符 c = a + b
+= 加法赋值运算符 c += a 等价于 c = c + a
-= 减法赋值运算符 c -= a 等价于 c = c - a
*= 乘法赋值运算符 c *= a 等价于 c = c * a
/= 乘法赋值运算符 c /= a 等价于 c = c / a
%= 取模赋值运算符 c %= a 等价于 c = c % a
**= 幂赋值运算符 c **= a 等价于 c = c ** a
//= 地板除赋值运算符 c //= a 等价于 c = c // a
:= 海象运算符 可在表达式内部为变量赋值

2.1 := (海象运算符)

Python3.8版本新增运算符。也叫做赋值表达式,可在表达式内部为变量赋值。

至于为什么叫海象运算符……

只能说是一模一样
只能说是一模一样

Python3.8之前,我们的代码:

>>> age = 20
>>> if age >= 18:
        print("你成年了")

3.8之后我们的代码:

>>> if (age := 20) >= 18:
        print("你成年了")

思考:

>>> a = 3
>>> b = 4
>>> (a := a + 1) == 3 and (b := b + 1) == 4
#这个表达式的结果是多少
#表达式执行完毕后a和b的值分别是多少

3.移位运算符

3.1 概念

>>表示右移运算符,用于将该数据的二进制位向右移动,左边使用符号位进行填充;
<<表示左移运算符,用于将该数据的二进制位向左移动,右边使用0进行填充;

举个栗子:

>>> 10 >> 2
2
"""
十进制的10转化为二进制为:0000 1010
向右移动2位,左边添加符号位:00 0000 10
二进制的0000 0010转化为十进制为:2
"""

>>> 10 << 2
40
"""
十进制的10转化为二进制为:0000 1010
向左移动2位,右边添加0:00 1010 00
二进制的0010 1000转化为十进制为:40
"""

4.位运算符

4.1 概念

&表示按位与运算符,也就是按照二进制位进行运算,同1为1,一0为0;
|表示按位或运算符,也就是按照二进制位进行运算,一1为1,同0为0;
^表示按位异或运算符,也及时按照二进制位进行运算,相同为0,不同为1;
~表示按位取反运算符,也就是0为1,1为0.

举个栗子:

>>> a = 3
>>> b = 7
"""
十进制的3转化为二进制为:0000 0011
十进制的7转化为二进制为:0000 0111
"""

>>> a & b
#同1为1,一0为0,0000 0011转为十进制:3
3
>>> a | b
#一1为1,同0为0,0000 0111转为十进制:7
7
>>> a ^ b
#相同为0,不同为1,0000 0100转为十进制:4
4
>>> ~ a
#0为1,1为0,1111 1100转为十进制:-4
-4

补充
二进制负数转化为十进制步骤:

  1. -1,1111 1100 - 1 = 1111 1011
  2. 然后 按位取反,1111 1011 按位取反:0000 0100
  3. 转化成十进制,0000 0100 转化为十进制: 4
  4. 最后添加负号,-4

5.运算符优先级

思考:

###表达式结果为多少
>>> not 1 or 0 and 1 or 3 and 4 or 5 and 6 or 7 and 8 and 9
4
#为什么结果是4?

5.1 概念

运算表达式时执行的先后顺序,先执行具有较高优先级的运算符,然后执行较低优先级的运算符。

5.2 优先级顺序

运算符优先级从高到低排列如下:

优先级 运算符 描述
1 ** 指数(最高优先级)
2 ~ , +X , -X 按位翻转,正号,负号
3 * , / , % , // 乘,除,取模,地板除
4 + , - 加法,减法
5 >> , << 右移,左移运算符
6 & 按位与
7 ^ 按位异或
8 | 按位或
9 < , <= , > , >= 比较运算符
10 == , != 等于运算符
11 = , += , -= , *= , /= , //= , **= 赋值运算符
12 is , is not 身份运算符
13 in , not in 成员运算符
14 not 逻辑‘非’
15 and 逻辑‘与’
16 or 逻辑‘或’

记不住?没关系,记住三句话就够了:

  1. ()运算符的优先级极高;
  2. =运算符的优先级极低;
  3. * / % // 运算符的优先级高于 + -,同级的运算符哪个在前先算哪个;
点点关注不迷路
点点关注不迷路
- END -

瀋凣

2021/04/29  阅读:29  主题:极简黑

作者介绍

瀋凣