一、表达式
表达式,就是由变量、运算符、数字、数字分组符号(括号)等以能求得数值的有意义排列方法所得的组合。
1.运算的分类
1.算术运算
2.比较运算/关系运算
3.赋值运算
4.逻辑运算
5.位运算
6.成员运算
7.身份运算
1.算数运算
+ 加法运算
- 减法运算
* 乘法运算
/ 除法运算
% 取余运算
// 取商运算/地板除
** 幂运算
注意:python中没有自增自减的 ++ 或者-- 运算
2.比较运算
== 等于运算
!= 不等于运算
> 大于运算
< 小于运算
>= 大于等于运算
<= 小于等于运算
注意:在python中没有 === 和 !== 运算,只要类型不同就是不等于
3.赋值运算
= 普通赋值
+= 加法赋值
-= 减法赋值
*= 乘法赋值
/= 除法赋值
%= 取余赋值
//= 取商赋值
**= 幂赋值
注意:a *= b 转换之后的表达式为 a = a * b 无论何种赋值运算都符合这个格式
4.逻辑运算
逻辑运算是布尔值之间的运算。
(1)and 与运算
与运算特征:有假则假
and 两边条件有一个为假,整个条件语句的条件就不成立
(2)or 或运算
或运算特征:有真则真
or 运算符两边条件任意一个为真,则该条件语句条件就为真
(3)not 非运算
非运算特征:真变假,假变真
条件取反
5.位运算
位运算就是在二进制基础上进行的逻辑运算,将0视为False,将1 视为True进行的运算
(1)& 按位与运算:
按位与运算就是将数据转化为2进制数据然后进行每个位上的逻辑与运算
变量 = 值1 & 值2
(2)| 按位或运算
按位或运算就是将数据转化为2进制数据然后进行每个位上的逻辑或运算
变量 = 值1 | 值2
(3)~按位非运算
按位非运算就是将数据转化为2进制数据然后进行每个位上的逻辑非运算
变量 = ~值
注意:按位非运算之后计算机会进行反码和补码的相关操作之后进行数据存储。
(4)^按位抑或运算
按位抑或运算就是将数据转化为2进制数据然后进行每个位上的逻辑抑或运算
变量 = 值1 ^ 值2
(5)左移运算
将数据转化为二进制之后,将二进制数据的所有数据向左移动指定的位数
变量 = 值 << 移动位数
特征:左移N位相当于乘以2的N次方,此方法速度远高于乘法
(6)右移运算
将数据转化为二进制之后,将二进制数据的所有数据向右移动指定的位数,如果数据移除右侧边界,则会被删除,实际上相当于采用了地板除!
变量 = 值 >> 移动位数
特征:右移N位相当于除以2的N次方,舍弃小数部分。此方法速度远高于除法
(7)成员运算
in 检测一个值在指定的序列类型里面
格式: 值 in 可迭代序列
not in 检测一个值是否不再指定的序列里面
格式: 值 not in 可迭代序列
(8)身份运算
is 检测值1是不是和值2在内存中是否是同一个值,类似id()功能
格式: 数据1 is 数据2
is not 检测值1是不是和值2在内存中是否不是同一个值,类似id()功能
格式: 数据1 is not 数据2
2.运算优先级问题
** 指数 (最高优先级)
~ + - 按位翻转, 一元加号和减号 (最后两个的方法名为 +@ 和 -@)
* / % // 乘,除,取模和取整除
+ - 加法减法
>> << 右移,左移运算符
& 位 'AND'
^ | 位运算符
<= < > >= 比较运算符
== != 等于运算符
= %= /= //= -= += *= **= 赋值运算符
is is not 身份运算符
in not in 成员运算符
not or and 逻辑运算符
注意:不推荐死记硬背优先级,在实际使用中最好使用 () 解决优先级问题
三、检测数据归属
1.type() :
测试时可以使用,开发尽量避免使用
格式:
type(变量)
2.isinstance():
检测一个数据是否由指定的类型创建
格式:
isinstance(变量,检测的类型)
PS:还有python中的 and or 短路问题:
1. 表达式从左至右运算,若 or 的左侧逻辑值为 True ,则短路 or 后所有的表达式(不管是 and 还是 or),直接输出 or 左侧表达式 。
2. 表达式从左至右运算,若 and 的左侧逻辑值为 False ,则短路其后所有 and 表达式,直到有 or 出现,输出 and 左侧表达式到 or 的左侧,参与接下来的逻辑运算。
3. 若 or 的左侧为 False ,或者 and 的左侧为 True 则不能使用短路逻辑。