python全栈_003_Python3运算符

Python语言支持以下类型的运算符:

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

接下来让我们一个个来学习Python的运算符。

1:算术运算符

  以下假设变量a为10,变量b为31;s1="ab",s2="cd"

运算符描述实例
+ 加 - 两个对象相加   a + b 输出结果 41
  s1+s2 = "abcd"
- 减 - 得到负数或是一个数减去另一个数   a - b 输出结果 -21
* 乘 - 两个数相乘或是返回一个被重复若干次的字符串   a * b 输出结果 310
  s1*3="ababab"
/ 除 - x 除以 y   b / a 输出结果 3.1
% 取模 - 返回除法的余数   b % a 输出结果 1
** 幂 - 返回x的y次幂   a**b 为10的31次方
// 取整除 - 向下取接近除数的整数
 b // a = 3

  -31 // 10 = -4

  9 // 2  = 4

     -9//2    = -5
    (向下取整)

a = 10
b = 31
s1 = "ab"
s2 = "cd"
print(a + b)
print(a - b)
print(a * b)
print(b / a)
print(b % a)
print(a ** b)
print(b // a)
print(-31 // 10)
print(9 // 2)
print(9 // -2)
print(s1 + s2)
print(s1 * 3)
Python算术运算符

2:比较(关系)运算符:

  就是比较两个对象(或者变量)的大小关系:相等,不相等,大于,小于,等等,其比较的结果为布尔型(False 或者True);以下假设变量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。

a = 10
b = 20
print(a == b)  #False
print(a != b)  #True
print(a > b)   #False
print(a < b)   #True
print(a >= b)  #False
print(a <= b)  #True
比较运算符

3:赋值运算符

  以下假设变量a为10,变量b为20:

运算符描述实例
= 简单的赋值运算符 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

  Python中没有像c++中的 ++ 和 -- 运算符,所以在计算加1(或减1)时不能使用 i++(或i--),只能使用 i += 1 or i = i +1 (i -= 1 or i = i -1)

4:逻辑运算符

Python语言支持逻辑运算符(类似C++中的 && ,||),以下假设变量 a 为 10, b为 20:

运算符逻辑表达式描述实例
and x and y 1:布尔"与" - 如果 x 为 False,x and y 返回 False,否则它返回 y 的计算值。
2:从左到右(x到y)进行判断,当碰到一个值为False时,立即停止后面的判断,返回当前判断的值;如全为True,返回最后一个判断的值。
3:简单点:当左右两端同时为真, 运算的结果才能是真。
(a and b) 返回 20。
or x or y 1:布尔"或" - 如果 x 是 True,它返回 x 的值,否则它返回 y 的计算值。
2:从左到右(x到y)进行判断,当碰到一个值为True时,立即停止后面的判断,返回当前判断的值;如全为False,返回最后一个判断的值。
3:有一个为真, 结果就是真。
(a or b) 返回 10。
not not x 1:布尔"非" - 如果 x 为 True,返回 False 。如果 x 为 False,它返回 True。
2:非真即假, 非假即真.
not(a and b) 返回 False

  

a = 0
b = 20
c = 10
def add_c():
    global c
    c += 1
    return c
print(a and b and add_c() )  # 输出 0 ,判断a为0,即假,立即结束判断,就不会去判断b,不会去调用add_c(),此时c的值还是10
if a and b and add_c():
    pass
print(c) #  输出10
print(a or b or add_c()) #输出 20,判断a为假,继续判断b,b为20,即为真,立即结束判断,返回20,不会去调用add_c(),此时c的值还是10
if a or b or add_c():
    pass
print(c)   #  输出10

print('-----------')
a = 10
b = 20
c = 10
print(a and b and add_c() )  # 输出 11 ,判断a为10,即真,继续判断b,为真,继续调用add_c(),add_c()返回值为11,此时c的值为11
print(c) #  输出11

print('-----------')
a = 0
b = 0
c = 10
print(a or b or add_c() )  # 输出 11 ,判断a为0,即假,继续判断b,为假,继续调用add_c(),add_c()返回值为11,此时c的值为11
print(c) #  输出11
逻辑表达式执行过程
逻辑表达式的优先级: () => not => and => or
c = 10
def add_c():
    global c
    c += 1
    return c

if 2 and 0 or 9 and 2 and (9 - 2) or 22 and not 0 or add_c():
    print("")
else:
    print("")
print(2 and 0 or 9 and 2 and (9 - 2) or 22 and not 0 or add_c())  #输出 7
print(c) #输出 10
'''
() => not => and => or
2 and 0 or 9 and 2 and (9 - 2) or 22 and not 0 or add_c()  #首先计算 ()中的值(为7),结果在下一行
2 and 0 or 9 and 2 and 7 or 22 and not 0  or add_c()       #计算not 0 ,为True,结果在下一行
2 and 0 or 9 and 2 and 7 or 22 and True   or add_c()       #计算and ,结果在下一行
   0    or    2    and 7 or 22 and True  or add_c()
   0    or        7      or    True      or add_c()       #计算or ,结果在下一行,碰到7,即真,立即停止后面的判断,不会调用add_c(),c的值还是10
                 7     结束后面的判断,返回7
'''
逻辑表达式的优先级: () => not => and => or

5:位运算符

  按位运算符是把数字看作二进制来进行计算的。Python中的按位运算法则如下:

下表中变量 a 为 172,b 为 77 二进制格式如下:

a   = 1010 1100
b   = 0100 1101
-----------------
a&b = 0000 1100  #对应位,只要有一个为0,结果就为0
a|b = 1110 1101  #对应位,只要有一个为1,结果就为1
a^b = 1110 0001  #同0,对应位相同就为0,
~a =1 1010 1101  # ~a = -(a + 1),~a运算过程如下:

二进制数在内存中以补码的形式存储。
按位取反:二进制每一位取反,0变1,1变0。
a   = 1010 1100
~a的计算步骤:
a的二进制:0 1010 1100
计算补码: 0 1010 1100 (正数的补码,原码为其本身)
按位取反: 1 0101 0011 (此处标记为"SS";这是补码,需要转换为原码) 
转换为原码:  
  方法一:取反加1: 
         1 1010 1100  (对标记为"SS"的进行取反;高位为符号位,保持不变)
     +             1
         1 1010 1101  
  方法二:减1取反:
         1 0101 0011  (是标记为"SS"的)
       -           1
         1 0101 0010
    取反:1 1010 1101   (高位为符号位,保持不变)
 
运算符描述实例
& 按位与运算符:参与运算的两个值,如果两个相应位都为1,则该位的结果为1,否则为0 (a & b) 输出结果 12 ,二进制解释: 0000 1100
| 按位或运算符:只要对应的二个二进位有一个为1时,结果位就为1。 (a | b) 输出结果 237 ,二进制解释: 1110 1101
^ 按位异或运算符:当两对应的二进位相异时,结果为1 (a ^ b) 输出结果 225 ,二进制解释: 1110 0001
~ 按位取反运算符:对数据的每个二进制位取反,即把1变为0,把0变为1。~x类似于 -x-1 (~a ) 输出结果 -173 ,二进制解释: - 1010 1101, 在一个有符号二进制数的补码形式。
<< 左移动运算符:运算数的各二进位全部左移若干位,由"<<"右边的数指定移动的位数,高位丢弃,低位补0。
a<<n  就是a乘以2的n次方
a << 2 输出结果 688 ,二进制解释: 10 1011 0000
172 * 2的2次方  == 172 * 4
>> 右移动运算符:把">>"左边的运算数的各二进位全部右移若干位,">>"右边的数指定移动的位数。
a>>n  就a除以2的n次方
a >> 2 输出结果 43 , 二进制解释:  0010 1011
172 // 2的2次方  == 172 // 4

以下实例演示了Python所有位运算符的操作:

a = 0b10101100  # 172
b = 0b01001101  # 77
print(a,b)
print(a&b,bin(a&b))
print(a|b,bin(a|b))
print(a^b,bin(a^b))
print(~a,bin(~a))
print(a,a<<2,bin(a<<2)) # a * (2**2)  688
print(a,a>>2,bin(a>>2)) # a // (2**2) 43

 异或运算符:两个相同的数 进行异或其结果为0,0 与 a 进行异或其结果是其a本身;(异或运算有许多应用,后期专门总结)

a = 10
print(a ^ a) # 输出 0
print(0 ^ a) # 输出 10

6:成员运算符

  除了以上的一些运算符之外,Python还支持成员运算符,测试实例中包含了一系列的成员,包括字符串,列表或元组。

运算符描述实例
in 如果在指定的序列中找到值返回 True,否则返回 False。 x 在 y 序列中 , 如果 x 在 y 序列中返回 True。
判断x是否在y中
not in 如果在指定的序列中没有找到值返回 True,否则返回 False。 x 不在 y 序列中 , 如果 x 不在 y 序列中返回 True。
a = 10
b = 20
list = [1, 2, 3, 4, 5, 6]
if a in list:
    print('1-in-变量a={0}在给定的列表list={1}中'.format(a, list))
else:
    print('1-in-变量a={0}不在给定的列表list={1}中'.format(a,list))
if b not in list:
    print('2-not-in-变量b={0}不在给定的列表list={1}中'.format(b, list))
else:
    print('3-not-in-变量b={0}在给定的列表list={1}中'.format(b, list))
for i in list:
    print(i)

7:身份运算符

  身份运算符用于比较两个对象的存储单元

运算符描述实例
is is 是判断两个标识符是不是引用自一个对象

x is y, 类似 id(x) == id(y) , 如果引用的是同一个对象则返回 True,否则返回 False
判断x,y的内存地址是否相等
is not is not 是判断两个标识符是不是引用自不同对象 x is not y , 类似 id(a) != id(b)。如果引用的不是同一个对象则返回结果 True,否则返回 False。

  注: id() 函数用于获取对象内存地址。 

  is 与 == 区别:

    is 用于判断两个变量引用对象是否为同一个(判断两个变量的内存地址是否相等于,即id()函数的值是否相等), == 用于判断引用变量的值是否相等。

a = 20
b = 20
print(id(a))
print(id(b))
print(id(a) == id(b), a is b, a == b)  # True True True

a = [1, 2, 3]
b = [1, 2, 3]
print(id(a))
print(id(b))
print(id(a) == id(b), a is b, a == b)  # False False True

8:运算符优先级

以下表格列出了从最高到最低优先级的所有运算符:

运算符描述
** 指数 (最高优先级)
按位翻转,就只有一个一元操作符,并且其单独使用是无意义的
* / % // 乘,除,取模和取整除
+ - 加法减法
>> << 右移,左移运算符(右移相当于除,左移相当于乘)
& 位 'AND'
^ | 位运算符
<= < > >= 比较运算符(比较内存中的值是否相等)
<> == != 等于运算符(比较内存中的值是否相等)
= %= /= //= -= += *= **= 赋值运算符
is ,is not 身份运算符 (就是比较两个变量的内存地址是否相等,即id()函数的返回值是否相等)
in ,not in 成员运算符(判断x是否在y中)
and or not 逻辑运算符
原文地址:https://www.cnblogs.com/ixuby/p/10068821.html