Python基础-运算符

Python支持的运算符:

  • 算术运算符
  • 比较(关系)运算符
  • 赋值运算符
  • 逻辑运算符
  • 位运算符
  • 成员运算符
  • 身份运算符

 


 

运算符的优先级

 


 

算术运算符


 

比较运算符


 

赋值运算符

简写形式相当于把算术运算符移到等号左边,然后略去等号右边的c。


 

位运算符

相当于把数字看做二进制的形式进行逻辑运算。

 a=60 b=13

注意取反运算符~:

比如5的二进制形式是0000 0101,~5的二进制就是1111 1010 ,这是一个负数,而负数在计算机中是以补码(符号位不变,其余位取反再加1)的形式存储,所以~5的真实二进制形式是1000 0101+0000 0001=1000 0110=十进制6,加上符号就是-6。

同理,~-5,首先-5的原码是 1000 0101,负数是以补码的形式存储,所以-5的补码是1111 1010+0000 0001=1111 1011,然后取反运算符号按位逐一取反,得到0000 0100,即十进制正数4。

按位反转仅能用在数字前面。所以写成 3+~5 可以得到结果-3,写成3~5就出错了。

另外左移或者右移运算符,不是循环式的高位或者低位移出范围就丢弃。


 

逻辑运算符

1 print(0 and 1)      # =>0,0等同于False
2 print(False and 1)  # =>False
3 print(-1 and 1)     # =>1
4 print(1 or False)   # =>1,非零等同于True
5 print(True or False)# =>True
6 print(-1 or 0)      # =>-1

 

and注解:

  1. 在Python 中,and 和 or 执行布尔逻辑演算,如你所期待的一样,但是它们并不返回布尔值;而是,返回它们实际进行比较的值之一;
  2. 在布尔上下文中从左到右演算表达式的值,如果布尔上下文中的所有值都为真,那么 and 返回最后一个值;
  3. 如果布尔上下文中的某个值为假,则 and 返回第一个假值。

or注解:

  1. 使用 or 时,在布尔上下文中从左到右演算值,就像 and 一样。如果有一个值为真,or 立刻返回该值;
  2. 如果所有的值都为假,or 返回最后一个假值;
  3. 注意 or 在布尔上下文中会一直进行表达式演算直到找到第一个真值,然后就会忽略剩余的比较值。

and-or结合使用:

  1. 结合了前面的两种语法,推理即可。
  2. 为加强程序可读性,最好与括号连用,例如:
    1 (1 and 'x') or 'y'

 

成员运算符


 

身份运算符

常用在比较两个对象的存储单元。

 1 #!/usr/bin/python3
 2  
 3 a = 20
 4 b = 20
 5  
 6 if ( a is b ):
 7    print ("1 - a 和 b 有相同的标识")
 8 else:
 9    print ("1 - a 和 b 没有相同的标识")
10  
11 if ( id(a) == id(b) ):
12    print ("2 - a 和 b 有相同的标识")
13 else:
14    print ("2 - a 和 b 没有相同的标识")
15  
16 # 修改变量 b 的值
17 b = 30
18 if ( a is b ):
19    print ("3 - a 和 b 有相同的标识")
20 else:
21    print ("3 - a 和 b 没有相同的标识")
22  
23 if ( a is not b ):
24    print ("4 - a 和 b 没有相同的标识")
25 else:
26    print ("4 - a 和 b 有相同的标识")

 结果

1 a 和 b 有相同的标识
2 a 和 b 有相同的标识
3 a 和 b 没有相同的标识
4 a 和 b 没有相同的标识

 关于id()的补充:

  • 在 脚本式编程中:
1 a=500000
2 b=500000
3 c=500000
4 print(id(a))
5 print(id(b))
6 print(id(c))

得到的结果是

1 14408976
2 14408976
3 14408976
  • 而在交互式编程中,三者是不等的。

原因:在交互式环境中,编译器会有一个小整数池的概念,会把(-5,256)间的数预先创建好,而当超过这个范围的时候,变量就会指向不同的对象了,因此地址也会不一样。

 

posted @ 2019-08-05 23:13  流光记  阅读(246)  评论(0)    收藏  举报