Python运算符
python中的运算符有算术运算符、赋值运算符、比较运算符、逻辑运算符、成员运算符、身份运算符、位运算符
算数运算符
- 加法 +
- 减法 -
- 乘法 *
- 除法
- 单斜杠 / 结果是是浮点型,除不尽,商会有小数
- 双斜杠 // 结果是整型的,对商会向下取整,<=商且接近商的整数,例如75//74,结果为1
- 余数 %
- 两个数相除,除不尽,会有余数,取余;例如7%5,余数为2,则结果为2
- 幂数 **
- 比如3**2,就是求3的2次方,结果为9
- 如果为小数,4**(1/2),对4的开方,结果为2
算数优先级: ** 优先于 符号 优先于 *、/、//、% 优先于 加减
提高优先级使用小括号() 括起来
赋值运算符
简单的赋值运算
变量名 = 数据值
将等号右边的表达式计算结果,赋值给左边的变量名
例如:
a = 12
a = 13 + 4
b = 32
a = b // 2
复合赋值运算
结合其他运算符在内的赋值格式,比如 +=、-=、 *=、 /=、//=、%=、**=
变量名 += 表达式
先计算表达式的结果 在对变量名根据结果进行相应的算术运算,最后把计算结果赋值给变量名
比如:
a = 2
a += 3+4 【则先运算3+4,然后计算a+(3+4),最后赋予a值】
a = 7 + 2
a = 9
a = 2
a += 3 + 4
print(a) # 输出结果 为 9
赋值表达式(海象运算符)
把某个赋值表达式的结果再赋值给另外一个变量,这种格式称为赋值表达式
在其他语言中,支持 y = (x = 17 % 3)
解读:先计算x的结果,再把x的值赋值给y
但是这个写法在Python中不支持,在Python中的写法为:
y = (x := 17 % 3)
这里其实也是同时定义了两个变量,只不过不同于a,b=11,12的是这个赋值表达式在定义变量的时候,某个变量的值参与另外一个变量定义的运算
比较运算符
> 判断前者是否大于后者
>= 判断前者是否大于或者等于后者
< 判断前者是否小于后者
<= 判断前者是否小于或者等于后者
== 判断两者是否相等
!= 判断两者是否不相等
注意: 算术运算符的优先级别高于比较运算符
字符串数据的比较:
本质比较的是字符对应的十进制数据,比较规则是相同位置的字符进行比较,直到比较出结果
逻辑运算符
注意:逻辑运算符的优先级别是低于比较运算符的
逻辑 与 and
and表示并且的关系,左右两个表达式同时成立,结果才成立
True and True = True
True and False = False
False and False = False
False and True = False
and的运行机制:
具有短路原则,如果左边的表达式不成立,则右边的表达式不被执行。
执行机制是左边表达式成立,结果取决于右边表达式;左边表达式不成立,结果就是左边表达式的值
逻辑 或 or
or 表达或者的关系 ,当两个表达式中有一个成立,结果就是成立
True or True = True
True or False = True
False or True = True
False or False = False
or 也具备短路原则 ,执行机制则是左边表达式成立,结果就是左边表达式的;左边表达式不成立,解决取决于右边表达式的值
逻辑 非 not
对逻辑关系取反,逻辑关系结果为真,not之后设定为假;逻辑结果为假,not
之后设定为真
not True = False
not False = True
优先级别: not
> and
> or
成员运算符
用来判定 某个数据是否是某个容器型数据中的元素
数据 in 容器型数据
把数据作为一个整体 判断是否在容器中
数据 not in 容器型数据
把数据作为一个整体 判断是否不在容器中
位运算符
& 按位 与
位置相同数据 只要有一个是0 该位置的结果为0
| 按位 或
相同位置的数据,只有有一个是1,该位置的结果为1
^ 按位异或
相同位置的数据一样,该位置位0,否则为1 【相同为0,不同为1】
一个数与相同的数异或两次结果是数其本身 【交换两个变量的值】
示例: a = 10 ,b = 20
a ^ b = 10 ^ 20
b ^ a = 20 ^ 10^20 (异或两次,b的值为10)
a = 10
b = 20
a = a ^ b
print(b ^ a)
# 输出结果为10
~ 按位取反
该位置上的数据0变1,1变0
>> 按位右移
将二进制数据向右移动N位,左边空出
如果是正数 左边补0
如果是负数 左边补1
规律:
数值//(2**N)
<< 按位左移
将二进制数据向左移动N位,右边空出补0
规律:
数值*2**N
原码、反码、补码
运算符都是针对于位(二进制数据中一个0或者一个1称为一位)的
在计算机发展过程中,根据数据计算的发展的一个历程,二进制形态出现过三种:原码/反码/补码。 现在的计算机中存储处理二进制数据的形态是补码
对于正数来说,三码合一,格式是一样的, 原码样子就是将十进制数据按照规则转化为二进制的格式
负数的原码: 在正数的基础上将最高位置为1,则表示这个数据为负数。【二进制的最高位为符号位:0表示正数 1表示负数】【符号位最高位简单说就是左边第一位数】
负数的反码:在负数原码的基础上,除了符号位,0变1,1变0
负数的补码: 在负数反码的基础上加1