运算符:运算符用于执行程序代码运算,会针对一个以上操作数项目来进行运算 python支持的运算符:
算术运算符 两个对象相加或者相同数据类型的拼接 + 1+2+False+True print(“234”+“123”) print([1,2,3,45]+[1,“234”,True,3.14]) 》》》 4 “234123” [1, 2, 3, 45, 1, ‘234’, True, 3.14] 一个数减去另一个数 - 1-True 》》》 0 两个数相乘或是返回一个被重复若干次的字符串* 5*False print(‘asjkfdhsk我’*2) 》》》 0 asjkfdhsk我asjkfdhsk我除法/ 3.556/5522 》》》 0.0006439695762404926 5/False 》》》 Traceback (most recent call last): File “<pyshell#1>”, line 1, in ZeroDivisionError: division by zero 6/3 》》》 2.0返回除法的余数% [5%2,‘widjj’] 》》》 [1, ‘widjj’]返回x的y次幂** 2**6 》》》 64取整除 - 向下取接近除数的整数// 9//2 -9//2 》》》 4 -52.比较运算符
等于 - 比较对象是否相等==不等于 - 比较两个对象是否不相等!=大于 - 返回x是否大于y >小于 - 返回x是否小于y <大于等于 - 返回x是否大于等于y >=小于等于 - 返回x是否小于等于y <=3.赋值运算符 ****= 简单的赋值运算符 c = a + b 将 a + b 的运算结果赋值为 c += 加法赋值运算符 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 4.位运算符 按位运算符是把数字看作二进制来进行计算的
a=60#0011 1100 b=13#0000 1101 print(a&b) print(a|b) print(a^b) print(~a) print(a<<2) print(a>>2) 12#0000 1100 61#0011 1101 49#0011 0001 -61#1100 0011 240#1111 0000 15#0000 11115.逻辑运算符
a=5 b=7 if (a and b): print("a和b都为True") else: print("a和b至少有一个为假") a=0 if (a and b): print("a和b都为True") else: print("a和b至少有一个为假")在这里插入代码片 a和b都为True a和b至少有一个为假**python 中的 and 从左到右计算表达式,若所有值均为真,则返回最后一个值,若存在假,返回第一个假值; or 也是从左到有计算表达式,返回第一个为真的值;如果都为真或假,则返回最后一个值 在Python中,None、任何数值类型中的0、空字符串“”、空元组()、空列表[]、空字典{}都被当作False,还有自定义类型,如果实现了 __ nonzero __ () 或 __ len __ () 方法且方法返回 0 或False,则其实例也被当作False,其他对象均为True
print(1 and 0) print(1 and True) print(True and 1) print(False and 0) print(0 and False) print(False or 0) print(0 or False) print(-1 or 0) print(0 or 1) print(not 0) print(not '') print(not 1) # and:前面为假(0 或者 False)则表达式为假,否则表达式为后面的值; # or:前面为真(非 0 或者非 False)则表达式为前面的值,否则表达式为后面的值; 0 True 1 False 0 0 False -1 1 True True False a=0 b=7 if not a: print("a和b都为True") else: print("a和b至少有一个为假") if not b: print("a和b都为True") else: print("a和b至少有一个为假") a和b都为True a和b至少有一个为假 print(1 and 2 or not 1) print(1 and not 2 or False) print(not True and False or False) print(not False or True and False) print(True or False and not False) print(False or not False and 0) #优先级:not>and>or 2 False False True True 06.成员运算符
a='a' b='ab' print(a in b) print(a not in b) c=[a,b] print('a' in c) print(a not in c) True False True False7.身份运算符
a=5 b=6 c=5 print(id(a)) print(id(b)) print(id(c)) print(a is b) print(a is c) print(b is not c) a=a+1 print(id(a))#变得内存地址与b一样了 print(a is not b) #python 中,变量是以内容为基准而不是像 c 中以变量名为基准,所以只要你的数字内容是5, # 不管你起什么名字,这个变量的 ID 是相同的,同时也就说明了 python 中一个变量可以以多个名称访问 1468033920 1468033952 1468033920 False True True 1468033952 False上述所说的在脚本式编程环境类似pycharm中没有问题。但是在交互式环境中,编译器会有一个小整数池的概念,会把(-5,256)间的数预先创建好,而当a和b超过这个范围的时候,两个变量就会指向不同的对象了,因此地址也会不一样
>>> a=1000 >>> b=1000 >>> id(a) 2138803203856 >>> id(b) 2138803203824is 判断两个对象是否为同一对象, 是通过 id 来判断的; 当两个基本类型数据(或元组)内容相同时, id 会相同, 但并不代表 a 会随 b 的改变而改变。
a=10000 b=10000 list1=['加油','Mr Xiao','0527',a] list2=['Fighting','肖先生','0527',b] print(list1[3] is list2[3]) list1=('加油','Mr Xiao','0527',a) list2=('Fighting','肖先生','0527',b) print(list1[3] is list2[3]) list1={10:'加油',11:'Mr Xiao',12:'0527',13:a} list2={10:'Fighting',11:'肖先生',12:'0527',13:b} print(list1[13] is list2[13]) True True True8.运算符优先级
a=60#0011 1100 b=13#0000 1101 print(~a-4+1) print(a|b&a^b) -64 61