Python语言支持以下类型的运算符:
- 算术运算符
- 比较(关系)运算符
- 赋值运算符
- 逻辑运算符
- 位运算符
- 成员运算符
- 身份运算符
这里会讲到这些运算符的用法
算术运算符与算术运算表达式
算术运算符
运算符 | 功能 | 示例(a = 10,b = 11) |
---|---|---|
+ | 加:两个对象相加 | a + b = 21 |
- | 减:两个对象相减,或得到负数 | a - b = -1 |
* | 乘:两个操作数相乘,或是返回一个被重复若干次的字符串 | a * b = 110 |
/ | 除:两个操作数相除(总是浮点数) | a / b = 0.9090909090909091 |
% | 取模:返回除法的余数 | a % b = 10 |
** | 幂:返回 x 的 y 次幂 | a ** b = 100000000000 |
// | 取整:返回商的整数部分 | a // b = 0 |
算术运算表达式
3+2 3-1 8**9 5%3
功能:进行相关符号的数学运算,变量只参与运算,不会改变变量的值
值:相关的数学运算的结果
比较运算符
运算符 | 功能 | 示例 |
---|---|---|
== | 等于:如果两个操作数相等,则为True,否则为False | x == y |
!= | 不等于:如果两个操作数不相等,则为True,否则为False | x != y |
> | 大于:如果左操作数大于右操作数,则为True,否则为False | x > y |
< | 小于:如果左操作数小于右操作数,则为True,否则为False | x < y |
>= | 大于等于:如果左操作数大于或等于右操作数,则为True,否则为False | x >= y |
<= | 小于等于:如果左操作数小于或等于右操作数,则为True,否则为False | x <= y |
当变量为字符串的时候,比较的是字符串的ASCII码值,如下:
a = "hello"
b = "abcde"
print(a == b) #False
print(a != b) #True
print(a >= b) #True
print(a <= b) #False
print(a > b) #True
print(a < b) #False
拓展:可以使用ord()和chr()两个内置函数用于字符与ASCII码之间的转换
print(ord('a')) #97
print(chr(97)) #a
赋值运算符与赋值运算表达式
赋值运算符
运算符 | 功能 | 示例(三位数为a,b,c) | 等价于 |
---|---|---|---|
= | 简单的赋值运算符 | c = a + b | 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 |
赋值运算表达式
格式:变量 = 表达式
注意:使用赋值运算表达式的时候,写在等号左边的变量值会发生变化,写在等号右边的变量只参与运算,值不发生变化
以下的代码可以很好的表现出赋值运算表达式中值得变化:
a = 10
b = 20
'''
多个变量赋值还可以这样写
a,b = 10,20
a,b = (10,20)
a,b = [10,20]
'''
a += b
print("a=",a) # 30
print("b=",b) #20
a -= b
print("a=",a) #10
print("b=",b) #20
a *= b
print("a=",a) #200
print("b=",b) #20
逻辑运算
运算符 | 功能 | 概括 | 示例 |
---|---|---|---|
and | 逻辑与:如果x为False,返回False;否则返回y的计算值 | 全真则真,一假则假 | x and y |
or | 逻辑或:如果x是非0,返回x的值;否则返回y的计算值 | 全假则假,一真则真 | x or y |
not | 逻辑非:如果x为False,返回True;如果x为True,返回 False | 假变真,真变假 | not x |
下面代码是逻辑运算的一些简单使用:
print(True and 0 and False) #0
print(True and True and "good") #good
print(True and 1) #1
print(True and "hello") #hello
print(True and 0) #0
print(True or 1) #True
短路原则
表达式1 and 表达式2 and 表达式3 …
当使用and进行连接的时候,若发现有一个表达式的结果为假,剩余表达式不再进行运算直接返回假。
表达式1 or 表达式2 or 表达式3 …
使用or来进行链接的时候,若发现有一个表达式的结果为真,剩余表达式也不再继续进行运算直接返回真
逻辑运算符的优先级:()优先级最高 > not优先级 > and优先级 > or优先级,如下:
print((0 or 1) and "hello" or not False) #hello
注意:表示假:False,0,None,"",[],(),{},如下:
print(not False)#True
print(not 0) #True
print(not None) #True
print(not "") #True
print(not ()) #True
print(not []) #True
print(not {}) #True
注意:bool值可以与number值参与运算,参与运算的时候True代表1,False代表0,如下:
print(True + 1) #2
print(False + 1) #1
位运算
运算符 | 含义 | 示例 |
---|---|---|
& | 按位与运算符:参与运算的两个值,如果两个相应位都为1,则该位的结果为1,否则为0 | x & y |
| | 按位或运算符:只要对应的二个二进制位有一个为1时,结果位就为1,否则为0 | x | y |
^ | 按位异或运算符:当两对应的二进位相异时,结果为1,否则为0 | x ^ y |
~ | 按位取反运算符:对数据的每个二进制位取反,即把1变为0,把0变为1 | ~x |
<< | 左移动运算符:运算数的各二进位全部左移若干位,由"<<"右边的数指定移动的位数,高位丢弃,低位补0 | x << 2 |
>> | 右移动运算符:把">>“左边的运算数的各二进位全部右移若干位,”>>"右边的数指定移动的位数 | x >> 2 |
注意:我们进行位运算的时候,我们需要把数值转换为二进制数来进行计算
注意:左移:x<<y 相当于x*2^y,右移:x>>y 相当于x//2^y
成员运算
运算符 | 含义 | 示例 |
---|---|---|
in | 如果在指定序列中找到值/变量则返回True,否则返回False | x in y |
not in | 如果在指定序列中没有找到值/变量则返回True,否则返回False | x not in y |
一些简单使用如下:
print(1 in [1,2,3,4]) #True
print("1" in "12334") #True
print("1" not in "12334") #False
print("1" in "2334") #False
print("1" not in "2334") #True
身份运算
运算符 | 含义 | 示例 |
---|---|---|
is | 判断两个标识符是不是引用自同一个对象,是则返回True,否则返回False | x is y |
is not | 判断两个标识符是不是引用自不同对象,是则返回True,否则返回False | x is not y |
注意:当我们使用=来进行对对象进行赋值的时候,两个变量则视为引用同一个对象
下面是身份运算符的一些简单使用:
list1 = [1,2,3]
list2 = [1,2,3]
list3 = list1
print(id(list1)) #39871304
print(id(list2)) #39073160
print(id(list3)) #39871304
print(list1 is list2) #False
print(list3 is list1) #True
注意:在[-5, 257)的整数取值范围内,python的内部具有缓存机制,因此在比较这个数值以内的数据可能就会有些问题。
>>>a = 10
>>>b = 10
>>>a is b
True
>>>a = 1000
>>>b = 1000
>>>a is b
False
但是需要注意的是使用交互式解释器模式运行时是没有问题的,当使用集成开发环境(IDE):PyCharm运行时就会出现问题,如下:
num1 = 1000
num2 = 1000
num3 = num1
print(num1 is num2) #True
#id(x) 查看变量x的id地址
print(id(num1)) #38899472
print(id(num2)) #38899472