算术运算符、赋值运算符、比较运算符、逻辑运算符、位运算符、身份运算符、成员运算符
1)算术运算符
+、-、*、/、//(取整,整除)、%、**(幂)
注意:
1.除(/)的运算结果数据类型为float
2.字符串,列表,元组有+,代表拼接,非字符串和字符串进行拼接时要将非字符数据str()转为字符串。事实上str()的参数也可以是字符串。
3.字符串,列表,元组有*,代表 “复制”>>'wy'*3 output : wywywy
2)赋值运算符
赋值的方式有多种:基本赋值,序列赋值,链接赋值,复合赋值
#基本赋值
a=1
#序列赋值
a,b,c=9,2,1 #即a=1;b=2;c=3;
#链接赋值
a=b=c=1 #即a=1;b=1;c=1;
#复合赋值
a=1
a+=1 #即a=a+1
3)比较运算符
==、<=、>=、!=、<、>
比较运算符真,假,分别返回bool变量True,False
注意:
1.True,False首字母大写
2.非零的数值变量,非空字符串为真,bool()进行类型转换得到True,eg. print(bool(1)) output:True
4)逻辑运算符
运算符 | 逻辑表达式 | 说明 |
---|---|---|
and | x and y | 与: x为假,则返回x的值,否则返回y的值 |
or | x or y | 或: x为真,则返回x的值,否则返回y的值 |
not | not x | 非: x为真,则返回False,否则返回True |
注意:
1.由于非零数值变量,非空字符串为真,所以逻辑表达式返回的值不一定是True ,False,可能是操作数的值
2.性能优化: 短路
3.操作数与运算符之间有空格
示例:
print(not 0) # True
print(not 1) # False
print(1+2 or 9) # 3
print(0 or 8) # 8
print(0 and 3) #0
print(1 and 2) #2
5)位运算符
6)身份运算符
身份运算符用于比较两个对象的存储单元,内存地址相同的两个变量进行is运算,返回True;内存地址不同的两个变量进行is not运算,返回True。
运算符 | 说明 |
---|---|
is | 判断两个对象的存储单元是否相同 |
is not | 判断两个对象的存储单元是否不同 |
注意操作数与运算符之间有空格
示例
注意区分不可变类型和可变类型的情况,有关两种类型的说明:不可变类型就是对象创建了之后不能改变对象的状态
#以str为例,number类似,tuple本身不可修改
s1='fksla'
s2=s1
print(s2 is s1) #此时s1,s2对象引用指向的是同一个对象,同一片内存空间
print(id(s1),id(s2)) #id()返回指向的对象的地址
s1=s1+'s' #这个s1已经不再是之前的s1,并不是指它原来指向的对象的值改变了,而是内存中开辟了一个新的内存存放新的值,而s1是这个新的对象的对象引用,这个和java里的字符串一样
print(s2 is s1)
print(id(s1),id(s2))
#output
# True
# 2623639886384 2623639886384
# False
# 2623639834736 2623639886384
#而像list,dict是可变对象,以list为例
l1=[1,2,'ds']
l2=l1
print(l1 is l2)
print(id(l1),id(l2))
l1.append(2)
print(l1 is l2)
print(id(l1),id(l2))
#output
#
# True
# 2926545055104 2926545055104
# True
# 2926545055104 2926545055104
7)成员运算符
成员运算符的作用是判断某个指定值是否存在与某个序列中,包括字符串,列表,元组
运算符 | 说明 |
---|---|
in | 如果在指定序列中存在指定值,返回True,否则返回False |
not in | 如果在指定序列中不存在指定值,返回True,否则返回False |
注意操作数与运算符之间有空格
示例:
a=[1,2,3]
print(1 in a) #True
print(4 in a) #False
print('y' not in 'wyy') #False
8)三元运算符
运算符的优先级
大体上为:
单目运算符(操作数为1)>算术运算符>比较运算符>赋值运算符>身份运算符>成员运算符>逻辑运算符