基本语法之-运算符
一、运算符分类
计算机可以进行的运算有很多种,可不只加减乘除这么简单,运算按种类可分为:
算术运算符 赋值运算符 比较运算符 身份运算符 成员运算符 逻辑运算符 位运算符
二、算术运算符
运算符 描述 实例 + 加 - 两个对象相加 10+21
输出结果31- 减 - 得到负数或是一个数减去另一个数 10-21
输出结果-11* 乘 - 两个数相乘或是返回一个被重复若干次的字符串 10*21
输出结果210/ 除 - x 除以 y 21/10
输出结果2.1% 取模 - 返回除法的余数 21%10
输出结果1** 幂 - 返回x的y次幂 2**2
输出结果4// 取整除 - 向下取接近除数的整数 9//2
输出结果4 , -9//2
输出结果-5
三、赋值运算符
运算符 描述 实例 =
简单的赋值运算符 c = 1+2
将 1+2 的运算结果赋值给c+=
加法赋值运算符 c += 1
等效与 c = c + 1
-=
减法赋值运算符 c -= 1
等效与 c = c - 1
*=
乘法赋值运算符 c *= 1
等效与 c = c * 1
/=
除法赋值运算符 c /= 1
等效与 c = c / 1
%=
取模赋值运算符 c %= 1
等效与 c = c % 1
**=
幂赋值运算符 c **= 1
等效与 c = c ** 1
//=
取整除赋值运算符 c //= 1
等效与 c = c // 1
四、比较运算符(关系运算符)
假设变量:a=10,b=20
运算符 描述 实例 ==
等于 - 比较对象是否相等 (a == b) 返回 False。 !=
不等于 - 比较两个对象是否不相等 (a != b) 返回 True。 >
大于 - 返回x是否大于y (a > b) 返回 False。 <
小于 - 返回x是否小于y。所有比较运算符返回1表示真,返回0表示假。这分别与特殊的变量True和False等价。注意,这些变量名的大写。 (a < b) 返回 True。 >=
大于等于 - 返回x是否大于等于y。 (a >= b) 返回 False。 <=
小于等于 - 返回x是否小于等于y。 (a <= b) 返回 True。
五、身份运算符
作用:
列举:
运算符 描述 实例 is
is 是判断两个标识符是不是引用自一个对象 x is y, 类似 id(x) == id(y) , 如果引用的是同一个对象则返回 True,否则返回 False is not
is not 是判断两个标识符是不是引用自不同对象 x is not y , 类似 id(a) != id(b)。如果引用的不是同一个对象则返回结果 True,否则返回 False。
六、成员运算符
列举:
运算符 描述 实例 in
如果在指定的序列中找到值返回 True,否则返回 False。 x 在 y 序列中 , 如果 x 在 y 序列中返回 True。 not in
如果在指定的序列中没有找到值返回 True,否则返回 False。 x 不在 y 序列中 , 如果 x 不在 y 序列中返回 True。
七、逻辑运算符
列举:
运算符 描述 0为False 其他为True 实例(a=10,b=20)
and 布尔"与" - 如果 x 为 False,x and y 返回 x,否则它返回 y 的计算值。 [(10 and 20)
返回 20], [(10 and -1)
返回:-1], [(-1 and 2)
返回:2], [(0 and 1)
返回 0] or 布尔"或" - 如果 x 是 True,它返回 x 的值,否则它返回 y 的计算值。 [(10 or 20)
返回 10], [(0 or 3)
返回 3] , [ (-1 or 4)
返回 -1] not 布尔"非" - 如果 x 为 True,返回 False 。如果 x 为 False,它返回 True。 not(a and b)
返回 False
八、位运算符
作用:
列举:
运算符 描述 实例a = 0011 1100,b = 0000 1101
&
按位与运算符:参与运算的两个值,如果两个相应位都为1,则该位的结果为1,否则为0 (a & b)
输出结果 12 ,二进制解释: 0000 1100|
按位或运算符:只要对应的二个二进位有一个为1时,结果位就为1。 (a | b)
输出结果 61 ,二进制解释: 0011 1101^
按位异或运算符:当两对应的二进位相异时,结果为1 (a ^ b)
输出结果 49 ,二进制解释: 0011 0001~
按位取反运算符:对数据的每个二进制位取反,即把1变为0,把0变为1。 ~x
类似于 -x-1 (~a )
输出结果 -61 ,二进制解释: 1100 0011, 在一个有符号二进制数的补码形式。<<
左移动运算符:运算数的各二进位全部左移若干位,由"<<"右边的数指定移动的位数,高位丢弃,低位补0。 a << 2
输出结果 240 ,二进制解释: 1111 0000>>
右移动运算符:把">>“左边的运算数的各二进位全部右移若干位,”>>"右边的数指定移动的位数 a >> 2
输出结果 15 ,二进制解释: 0000 1111
九、运算符优先级
运算符 描述 **
指数 (最高优先级) ~ + -
按位翻转, 一元加号和减号 (最后两个的方法名为 +@ 和 -@) * / % //
乘,除,取模和取整除 + -
加法减法 >> <<
右移,左移运算符 &
位 ‘AND’ ^ |
位运算符 <= < > >=
比较运算符 <> == !=
等于运算符 = %= /= //= -= += *= **=
赋值运算符 is is not
身份运算符 in not in
成员运算符 and or not
逻辑运算符
十、补充
【附录】1 python中id、is、=、== 分别是比较什么的?
id 查看内存地址 is 是比较内存地址是不是相同, = 是赋值 == 比较的是变量的值
1、首先理解 is 和 == 的区别
Python中的对象可以理解为包括以下几个要素:id(身份标识)、type(数据类型)、value(数据值),is和==的区别就是 is 比较的是数据的id值,也就意味着只要 a is b == True 的话,a和b指向的是同一个对象;==比较的是数据的value值。
2、代码块与代码块的缓存机制
Python的代码是由块构成的,每一个类、函数、模块等都可以称为代码块,此处需要注意:Python交互模式的每一行均是一个代码块。 Python在执行同一代码块的初始化对象的命令时,会检查其值是否已经存在,如果存在,会将其重用。也就是说遇到初始化对象的命令时,会将初始化的变量与值储存在一个字典中,遇到新的变量时,会去字典检索,如果之前初始化过,那么直接复用,注意:复用的对象在内存中只存在一个,id值相同。 代码块的缓存机制适用范围:int(float)、str、bool
3、小数据池
小数据池/驻留机制 是针对不同代码块之间的缓存机制,有点类似于全局的意思。 对于整数:Python自动将 -5~256 的整数进行了缓存,当你用这些数据的时候,并不会重新创建对象,而是使用已经创建好的缓存对象。 对于字符串:Python会将一定规则的字符串在字符串驻留池中创建一份,当字符串赋值给变量时候,并不会重新创建对象。
4、注意
a = 888
b = 888
print ( id ( a) , id ( b) )
print ( a is b)
>> > a, b = 256 , 256
>> > c, d = 257 , 257
>> > print ( id ( a) , id ( b) )
4363997296 4363997296
>> > print ( id ( c) , id ( d) )
4365831856 4365831888
>> > a is b
True
>> > a == b
True
>> > c is d
False
>> > c == d
True
>> >
总结:在交互模式下,每一行都是一个代码块,所以使用小数据缓存机制,整数的范围是 -5~256,由上可知,257并不在缓存池中