Python运算符
2021/6/7 周一
学习内容: Python运算符
如有错误,欢迎在评论区指出,非常感谢!
Python运算符
主要是与Java的运算符对照学习(可参照我的博客 Java运算符(操作符)
),有些基础的就没展开了,一些详细使用可见 菜鸟教程、w3school 网站。
一、算术运算符
- + 加
- - 减
- * 乘
- / 除,返回商(即使能整除,结果也是浮点数)
- % 取模,返回余数
- ** 幂
- // 取整除,向下*接近商的整数(结果是整数)
与Java相比,Python少了++ 和 - - 自增自减运算符,多了 ** 幂运算
且Java没有取商的运算符,Java的 / 就是Python的 // 整除
二、比较运算符(关系运算符)
- == 相等
- != 不相等
- > 大于
- < 小于
- >= 大于等于
- <= 小于等于
Python中的比较运算符基本与Java一样
三、位运算符
把参与运算的2个值以二进制位进行运算
- & 按位与 1&1=1; 1&0=0; 0&1=0; 0&0=0
- | 按位或 1|1=1; 1|0=1; 0|1=1; 0|0=0
- ^ 按位异或 1^1=0; 1^0=1; 0^1=1; 0^0=0
- ~ 按位取反 1个值运算 ~0=1; ~1=0
- << 左移动运算符 右边空出的位补0
- >> 右移动运算符 带符号右移,左边空出的补符号位
不同的是,Java的位运算还有>>>不带符号右移,Python没有不带符号右移
左移和右移举例:
>>> 左移
x = -3
i = 1
while i<7:
x<<=1
print(x)
i += 1
>>> 输出:
>>> -6
>>> -12
>>> -24
>>> -48
>>> -96
''' 对应二进制位:
原码 补码
-3 10000011 11111101
-6 10000110 11111010 左移并补0
-12 10001100 11110100
-24 10011000 11101000
-48 10110000 11010000
-96 11100000 10100000
左移位运算相当于乘以2的n次幂
'''
>>> 右移
x = -61
i = 1
while i<8:
x >>= 1
print(x)
i += 1
>>> 输出:
>>> -31
>>> -16
>>> -8
>>> -4
>>> -2
>>> -1
>>> -1
''' 对应二进制位:
原码 补码
-61 10111101 11000011
-31 10011111 11100001 右移并补符号位,这里是复数所以补1
-16 10010000 11110000
-8 10001000 11111000
-4 10000100 11111100
-2 10000010 11111110
-1 10000001 11111111
右移位运算相当于除以2的n次幂
'''
由于移位运算的速度很快,在程序中遇到表达式乘以或除以2的n次幂时,一般用移位运算符来代替。
四、赋值运算符
- = 简单的赋值运算符
- += 对应算数运算符,a+=1相当于a=a+1
- -=
- *=
- /=
- %=
- **= 幂赋值
- //= 取整除赋值
- &= 按位与赋值,对应位运算符
- |= 按位或赋值
- ^= 按位异或赋值
- >>= 向右位移赋值
- <<= 向左位移赋值
Python的赋值运算符比Java多很多,Java只有前6种,且根据算数运算符比较可知Java的 /= 与Python不同
五、逻辑运算符
- and 逻辑与,类似Java的&&,如果两个语句都为真,则返回 True。
- or 逻辑或,类似Java的||,如果其中一个语句为真,则返回 True。
- not 逻辑非,类似Java的!,取反。
在Java中,逻辑运算符主要是用来求表达式的结果是True还是False。
而在Python中,逻辑运算符除了可以用在表达式上,还可以直接用于变量的运算,比如:
a = 5
b = 10
print(a and b)
print(a or b)
>>> 10
>>> 5
a = 0
b = 10
print(a and b)
print(a or b)
>>> 0
>>> 10
print(not a)
print(not b)
>>> True
>>> False
总结:
- and 同真取最后一个真,有假取第一个假;
- or 同假取最后一个假,有真取第一个真;
- not 取反。
实际还是遵循上面类似Java的原则,只是因为用在表达式上时,真都是Ture,假都是False,所以不存在区分哪一个了。
而Python的布尔值不止用于表达式,用在数值、字符串等类型上,就能区分输出的是哪一个值。
六、成员运算符
- in 如果在指定的序列中找到值返回 True
- not in 如果在指定的序列中没有找到值返回 True
成员运算符就是在List、Tuple、Set、Dictionary中常用到的,检查是否存在指定元素关键字
mylist = [1,2,3,4,5]
print(1 in mylist)
print(2 not in mylist)
>>> 输出:
>>> True
>>> False
java没有成员运算符
七、身份运算符
- is 如果两个变量引用的是同一个对象,则返回 true
- is not 如果两个变量引用的不是同一个对象,则返回 true
java没有身份运算符
Python中 is 与 == 的区别:
is 用于判断两个变量引用对象是否为同一个,== 用于判断引用变量的值是否相等。
a = [1, 2, 3]
b = a #b引用了a
b == a
>>> True
b is a
>>> True
b = a[:] #b从a中截取,b和a是元素相同的2个序列
b == a
>>> True
b is a
>>> False
这也类似Java中的 == 判断地址相等,equals() 判断值相等
八、运算符的优先级
具体见 菜鸟教程
在实际开发中尽量用( )括号来限定运算次序。