这真的就是我们小学学过的运算符
“上课”
“起立”
“老师好!”
“同学们好,请坐,请翻到12页,今天我们来讲讲运算符。。。”

恩恩,一看到这个题目就忍不住触景生情了一把,下面我们来过一下python3中的运算符。
一、算术运算符
算术运算符最简单的就是加减乘除求摸,但我今天不会将所有运算符都一一列举,只看几个比较特殊的运算符。
python3中的除法比较特殊,下面以一个例子来进行说明一下。
In [1]:
a = 20
b = 1.5
c = 5
a / b,a // b,a / c,round(a/b,4)
Out[1]:
(13.333333333333334, 13.0, 4, 13.3333)
"/"是简单的除法,而"//"则是取整,但并不会四舍五入,如果需要指定小数位数,可使用round()函数,该函数会进行四舍五入。
"**" 两颗星是幂运算符,例如:
In [2]:
2**5
Out[2]:
32
二、关系运算符
关系运算符无非大于(>)、小于(<)、等于(==)及延伸出来的大于等于(>=)、小于等于(<=)和不等(!=)。
In [3]:
a = 12
b = 7
c = 7
a > b,a < b,a == b,b <= c,b >= c,b != c
Out[3]:
(True, False, False, True, True, False)
三、赋值运算符
最常见和常用的就是 "=",还有一些不常见的赋值运算符,即根据算术运算符和"="组合延伸出来的,如:+=,-=,*=,/=,//=,%=,**=,下面 一 一 来看一下。
>>> a = 12
>>> b = 3
>>> b += a
>>> b
15
>>> b -= a #这个减号‘-’有点诡异
>>> b
3
>>> b *= a
>>> b
36
>>> b **= 2
>>> b
1296
>>> b /= 36
>>> b
36.0
>>> b //= 7
>>> b
5.0
>>> b %= 3
>>> b
2.0
四、逻辑 / 位运算符
python里的逻辑运算符其实就是and(且) 、or(或)、 not(非),如果将and表示成“&&”就不好了,没有这种表示方法,逻辑运算符比较简单,其余两个也是,只有这种表示方法。
>>> a = 'a'
>>> b = 'b'
>>> a == 'a' and b=='c' #相当于 True and False
False
>>> a == 'a' or b=='c' #相当于True or False
True
>>> not (a == 'a') #相当于 not True
False
>>> not (b == 'a') #相当于 not False
True
python中有&,|,~,^等位运算符,表示位与、位或、位取反、位异或,此外还有<<(左移)和>>(右移)。
>>> i = 30 #下面的位运算都基于这两个数
>>> j = 10
>>> format(i,'b') #这是i = 30 的二进制表示
'11110'
>>> format(j,'b') #这是j = 10 的二进制表示
'1010'
>>> i & j #从最右边的位开始计算,遵循1 & 1=1,1 & 0 =0,0 & 0 =0 的计算规则;j左边不够补0
10
>>> i | j #遵循 1 |1=1,1 | 0 =1,0 | 0 =0,从右往左计算
30
>>> i ^ j #遵循 1^1=0,1 ^0 =1,0 ^ 0 =0;即同为0,异为1
20
>>> format(20,'b') #从异或结果的二进制就可以看得出来
'10100'
>>> i << 1 #左移一位相当于乘以2
60
>>> i << 2 #左移两位相当于乘以4,即2的2次方
120
>>> i #但 i 还是原来的值
30
>>> i >> 1 #相应的,右移一位相当于除以2,但不尽然。
15
>>> i >> 2 #像这种情况,不是2的倍数,似乎看不懂,看二进制位就明白了
7
>>> i >> 3
3
>>> format(7,'b') #这是7的二进制
'111'
>>> format(3,'b') #这是3的二进制
'11'
>>> format(15,'b') #这是15的二进制,这下就很好明白啦。
'1111'
五、成员 / 身份运算符
所谓成员运算符,其实就是一种表达式而已,嗯,我是这么理解的。在可迭代对象中都可以使用in 或者 not in 来判断某一变量或对象(毕竟python中一切皆对象)是否存在其中。下面以一个字符串来说明一下。
>>> str = 'I love python'
>>> 'I' in str
True
>>> 'love' in str
True
>>> 'you' in str #充分说明,I love 'python' more than 'you',hahah.
False
>>> 'python' not in str
False
那什么叫做身份运算符呢?
python中用 is (也叫做同一性运算符)来判断某两对象的标识符(可以理解为变量)是否指向同一对象(可理解为内存单元,不是类型)。
>>> a = 10
>>> b = 90
>>> c = 10 #a,b,c都是整型变量,其中a与c的值相等
>>> a is b
False
>>> a is not b
True
>>> a is c
True
>>> id(a)
1428095760
>>> id(c)
1428095760
>>> id(a) == id(c) #这里a和c的id相同
True
>>> id(b)
1428098320
>>> id(a) == id(b)
False
需要特别说明一下,可能这里有误解,以为只要两个变量的值相等就有相同的身份标识,即id,其实不是的,如:
>>> a = [1,2,3]
>>> b = [1,2,3]
>>> a is b
False
>>> a == b #两变量的值是相等的
True
>>> id(a)
39732552
>>> id(b) #所以a和b的id不一样,即使值相等。所以is是否为True是以身份标识即id来判断的
49467080
以上简单介绍了python中三种(值,身份唯一性标识,类型)对象间判断的两种方式,即值判断使用比较运算符,身份判断使用is/not is,下面简单介绍下类型的判断方法(使用isinstance())
>>> a = 'a'
>>> isinstance(a,int)
False
>>> isinstance(a,(float,int)) #类型还可以是一个元组
False
>>> isinstance(a,(float,int,type('c'))) #类型元组中有str类型,所以为True
True