03-02python运算符
运算符
算术运算符
运算符 | 描述 | 实测 |
---|---|---|
+ | 加:两个对象相加 | 1+1=3 |
- | 减:第一个数减去第二个数 | 1-1=0 |
* | 乘;两个对象相乘 | 1*1=1 |
/ | 除;第一个数除以第二个数 | 1/1=1 |
** | 幂:返回x的y此幂 | 10**20 10的20次方 |
// | 取整除:返回商的整数部分 | 9//2=4.5取整就是4 |
% | 取模:返回除法的余数 | 9%2=4.5无法整除返回为1 9.2%2=1.1999999999999993详情参考Python中的取模运算 |
算术运算符只能对int和float做运算 | ||
自然除就是我们正常理解的数学计算,取整除是取结果的整数部分 | ||
在python3中,所有的除法都是自然除,返回的都是float;python2中的除法都是取整除,返回的都是int |
例7:运算
In [22]: 1 + 1
Out[22]: 2
In [23]: 1 + 1.2 # 会隐式转换为float进行计算
Out[23]: 2.2
In [24]: type(1 + 1.2)
Out[24]: float
例8:python2与python3除法区别
In [25]: 3 / 2 # python3自然除
Out[25]: 1.5
>>> 3 / 2 # python2整除
1
>>> float(3) / 2 # python2中自然除的方法
1.5
>>> 5.0 / 2 # python2中自然除的方法
2.5
例9:python3的除法,返回全部都是float
In [27]: type(4/2)
Out[27]: float
比较运算符
- >:大于
- <:小于
- ==:等于
- !=:不等于,python2中有<>不等于的写法,但是在python3中已废弃
- >=:大于或等于
- <=:小于或等于
注意:比较运算的返回值都是bool类型
例9:比较运算符
In [27]: 3 > 5
Out[27]: False
In [28]: 5 > 3
Out[28]: True
In [29]: 5 != 3
Out[29]: True
逻辑运算符
- and:与
- or:或
- not:非
逻辑运算符的操作数都是bool类型或者可以隐式转换成bool类型的类型,返回值都是bool类型
例10:逻辑运算符
逻辑运算符的操作数都是bool类型或者可以隐式转换成bool类型的类型,返回值都是bool类型
In [30]: True and False # 双方都必须为真
Out[30]: False
In [31]: True or False # 需要一方为真就返回True
Out[31]: True
例11:逻辑运算符经常用作短路操作; 短路操作基本不会用到not
In [32]: def true():
...: print('true')
...: return True
...: def false():
...: print('false')
...: return False
...:
# or当第一个为真后面的就不执行了, 如果第一个为False则会继续执行后面的,如果都执行失败,则返回Flase, 但只要一个成功就返回True
In [29]: true() or false()
true
Out[29]: True
In [30]: false() or true()
false
true
Out[30]: True
In [34]: true() and true() # and指定前面为true然后继续执行后面的, 如果都为true, 就返回true
true
true
Out[34]: True
In [36]: true() and false() # and先执行第一个函数返回为true,继续执行第二个函数, 如果第二个函数为false就返回false
true
false
Out[36]: False
In [37]: false() and true()
false
Out[37]: False
该例子可以拆分两个部分:
1、是否执行了
2、返回的结果
短路操作:从左到右执行, 当已经有结果的时候, 将停止计算, 提前返回
也就是说, 当判断式已经确定时, 不再继续处理后续表达式。 && 在失败时中断, ||在成功时中断。
例12:逻辑计算
# 0为false
# 整数都为true
# None为false
* 空列表、空元组等都是false
In [32]: bool(0)
Out[32]: False
In [33]: bool(2)
Out[33]: True
In [35]: bool(None)
Out[35]: False
In [38]: 0 and 1
Out[38]: 0
In [39]: 0 and True
Out[39]: 0
In [40]: None and True
In [41]: True and None
In [42]: 1 and True
Out[42]: True
成员运算符
和集合类型相关,在集合类型时会介绍
身份运算符
和面向对象相关,在面向对象时会介绍
位运算符
- <<:左移
- >>:右移
- &:按位与
- |:按位或
- ^:按位取反
一般用在网络底层开发中,用的非常少
位运算符是直接操作二进制的
运算符优先级(当运算符在一起运算时)
- 乘法运算比取模运算优先级要高
- 算术运算 > 比较运算 > 逻辑运算
- 可以通过括号改变优先级,所以一般不确定的要其优先级高则
直接用括号
- 可以通过括号改变优先级,所以一般不确定的要其优先级高则
- 拿不准或者表达式比较复杂的适合,直接使用括号来决定优先级
例13:运算符的优先级
In [43]: 3 + 1 * 4
Out[43]: 7
In [44]: 3 * 4 ** 2
Out[44]: 48
In [45]: 3 * 4 % 3 # 乘法运算比取模运算优先级要高
Out[45]: 0
In [50]: 3 - 4 % 2
Out[50]: 3
例14:比较运算与逻辑运算
In [51]: 3 > 5 and 5 > 3
Out[51]: False
In [52]: 3 + 6 > 7
Out[52]: True
算术运算 > 比较运算 > 逻辑运算
可以通过括号改变优先级
赋值运算符(比较特殊)
上述运算符都会返回结果,而赋值运算符是不会返回结果的
**参考如下实例,一句话概括赋值运算符
:把右边计算的结果赋值给左边
赋值运算符是可以和算数运算符一起使用的
例15:赋值运算,把右边的值赋给左边,如果右边是个表达式,它会进行计算
In [53]: i = 3 + 58
In [54]: i
Out[54]: 61
In [55]: i /= 5
In [56]: i
Out[56]: 12.2
例16:赋值运算符和算数运算符一起使用
In [36]: i = 8
In [37]: i += 3
In [39]: i
Out[39]: 11