hopeless-dream

导航

运算符 Operator 及优先级

算数运算符

  • +  -  *  /  **  %
  • /表示自然除,结果是浮点数。//为整除。python2.x版本/和//都是整除。

用法举例

In [4]: 1+1
Out[4]: 2

In [5]: 2*2
Out[5]: 4

# 自然除
In [8]: 10 / 3
Out[8]: 3.3333333333333335

# 整除,向下圆整
In [9]: 10 // 3
Out[9]: 3

In [14]: -10 // 3
Out[14]: -4

# 取模,公式 x % y等价 x- ((x // y) * y)
In [10]: 10 % 3
Out[10]: 1

In [11]: -10 % 3
Out[11]: 2

In [13]: -10 % -3
Out[13]: -1

幂预算(由于乘方运算比求负(单目减)的优先级高,所以-3**2等价 -(3**2))

In [15]: 3 **2
Out[15]: 9

In [16]: -3**2
Out[16]: -9

In [17]: (-3)**2
Out[17]: 9

位运算符

  • & | ~ ^ << >>
  • << 和 >> 的运算:乘除2的整数倍。例如:16>>2 相当于 16//2**2 , 4<<2 相当于4*2**2

&位与

In [32]: 2 & 3
Out[32]: 2

In [35]: -2 & -3
Out[35]: -4

原理:计算中的数据都是以补码的形式存在的,据说稳定

-3 
源:10000011
反:11111100
补:11111101

-2
源:10000010
反:11111101
补:11111110

位与:补码相同位保留,不同位为0,然后取补码的源码
补:11111100
补码取反:10000011
末位加1:10000100

~取反

In [36]: ~2
Out[36]: -3

^异或

相同位取零,不同为相加

In [42]: 3 ^5
Out[42]: 6

In [43]: 3 ^ 2
Out[43]: 1

|位或

相当于取并集

In [46]: 8|5
Out[46]: 13

In [47]: 3|2
Out[47]: 3

>>和<<

In [48]: 8 >>1
Out[48]: 4

In [49]: 8 >>2
Out[49]: 2

In [50]: 8 <<2
Out[50]: 32

In [51]: 8 <<1
Out[51]: 16

比较运算符

  • ==    !=    >    <   >=   <= 返回boolean值 
  • 链式比较操作 4>x >=2 

逻辑运算符

  • 与 或 非 and or not
  • 短路:
    1. and 如果第一个表达式为False,后面不用计算了,都为False,可以将and看作是做“乘法运算“。
    2. or 如果第一个表达式返回True,后面不用计算了,都为True,可以将or看作是做“加法运算”。

赋值运算符

  • 等号:a = 5
  • +=   -=  *=  /=  %=
  • x = y = z = 1

成员运算符

  • in、not in

身份运算符

  • is、 is not

运算符优先级(由高到低)

运算符  描述
'expr' 字符串转换
{key:expr,...} 字典
[expr1,expr2...] 列表
(expr1,expr2,...) 元组
function(expr,expr2,...) 函数调用
x[start:stop:step] 切片
x[index] 下标索引取值
x.attribute 属性引用
~x 按位取反
+x, -x 正,负
x**y
x*y, x/y, x%y

乘,除,取模

x+y, x-y

加,减

x << y, x>>y 位移
x&y 按位与
x^y 按位异或
x|y 按位或

x < y, x <= y, x==y,

x!=y, x>=y, x>y

比较
x is y, x is not y 等同测试
x in y, x not in y 成员判断
not x 逻辑否
x and y 逻辑与
x or y 逻辑或
lambda arg,....:expr Lambda匿名函数

优先级:算数运算符 > 位运算符 > 身份运算符 > 成员运算符 > 逻辑运算符

逻辑与或和按位与或的区别:

  1、相似点:

    逻辑与和按位与的执行结果是一样的;逻辑或和按位或的执行结果也是一样的。

  2、不同点:

    逻辑与和逻辑或执行时,只需要判断第一个条件的真假就能得出整个条件的真假,不需要判断第二个条件;

    按位与和按位或执行时,需要判断第一个条件的真假就能得出整个条件的真假,但是还需要对后面的条件进行判断,并且最后把这些条件的结果结合起来才返回 整个条件的真假。

  由此看来,逻辑与或的执行效率比按位与或的效率高

 

单目运算符 > 双目运算符 > 三目运算符  (其中:三目运算符 > 双目运算符中的赋值运算) 

目数就是变量的个数

posted on 2019-10-14 15:14  hopeless-dream  阅读(282)  评论(0编辑  收藏  举报