【人生苦短,我学 Python】基础篇——运算符(Day6)

举报
AI 菌 发表于 2021/08/04 22:48:09 2021/08/04
【摘要】 大家好!我是【AI 菌】,一枚爱弹吉他的程序员。我热爱AI、热爱编程、热爱分享! 这博客是我对学习的一点总结与思考。如果您也对 深度学习、机器视觉、算法、Python、C++ 感兴趣,可以关注我的动态,我们一起学习,一起进步~ 我的博客地址为:【AI 菌】的博客 我的Github项目地址是:【AI 菌】的Github -> 前往【人生苦短,我学 Pyt...

大家好!我是【AI 菌】,一枚爱弹吉他的程序员。我热爱AI、热爱编程、热爱分享! 这博客是我对学习的一点总结与思考。如果您也对 深度学习、机器视觉、算法、Python、C++ 感兴趣,可以关注我的动态,我们一起学习,一起进步~
我的博客地址为:【AI 菌】的博客
我的Github项目地址是:【AI 菌】的Github

-> 前往【人生苦短,我学 Python】总目录 <-

前言: 本专栏在保证内容完整性的基础上,力求简洁,旨在让初学者更快地入门Python。这个Python学习专栏我打算分三个阶段:基础知识、进阶知识、实战训练。这将是一套完整、高效、循序渐进的Python系列讲解,您可以当做Python学习的入门教程。


我们都知道,在数学中进行各类计算需要运算符号,比如常用的加、减、乘、除等。同样地,在Python编程中,有时需要处理计算不同的数据、逻辑关系等,这时候对不同运算符的掌握就显得尤为重要了。这一讲就来聊聊Python中必须知道的七大类运算符运算优先级



一、算术运算符

算术运算符,可以理解为进行算术计算的运算符。在Python中,有下列这7种常用的算术运算符:

运算符 Value
+ 相加
- 相减
* 相乘
/ 相除
% 取模,返回余数
** 幂,返回x的y次幂
// 整除,向下取整

二、比较运算符

比较运算符用来比较两个对象的大小,返回True或者False。常用的比较运算符如下:

运算符 Value
== 比较两对象是否相等
!= 比较两个对象是否不相等
> 返回x是否大于y
< 返回x是否小于y
>= 大于或等于
<= 小于或等于

三、赋值运算符

在Pyhton中,最简单的赋值运算符是=,注意要和前面说到的关系运算符==区分。

以下是Pyhton中常用的(复合)赋值运算符:

运算符 Value
= 赋值运算符
+= a += i 等效于 a = a + i
-= a -= i 等效于 a = a - i
*= a *= i 等效于 a = a * i
/= a /= i 等效于 a = a / i
%= a %= i 等效于 a = a % i
**= a **= i 等效于 a = a ** i
//= a //= i 等效于 a = a // i
:= 可在表达式内部为变量赋值,是Python3.8 版本新增运算符。

四、位运算符

位运算符是把数字看作二进制来进行计算的。下面是一些常用的位运算符:

运算符 Value
& 按位与
| 按位或
^ 异或:当两对应的二进位相异时,结果为1
~ 按位取反
<< 左移运算符,左移一位相当于乘以2
>> 右移运算符,右移一位相当于除以2

下面举例演示了一下位运算符的操作:

a = 5  # 二进制形式为:0101
b = 10  # 二进制形式为:1010

print("a&b =", a&b)
print("a|b =", a|b)
print("a^b =", a^b)

print("a<<1 =", a<<1)
print("b>>1 =", b>>1)

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

输出:
在这里插入图片描述
位运算符是把数字看作二进制来进行计算的,因此:

  • a & b = (0101) & (1010) = 0000,转化为10进制则为0
  • a | b = (0101) | (1010) = 1111,转化为10进制则为15
  • a ^ b = (0101) ^ (1010) = 1111,转化为10进制则为15
  • a<<1,a左移一位,相当于乘以2,所以结果为10
  • b>>1,b右移一位,相当于除以2,所以结果为5

最后,介绍一下按位取反操作 ~:对数据的每个二进制位取反,即把1变为0,把0变为1。下面举一个简单例子:

a = 5  # 二进制表示为: 0 0101
b = -6  # 二进制表示为: 1 0110

print(~a)
print(~b)

  
 
  • 1
  • 2
  • 3
  • 4
  • 5

结果:
在这里插入图片描述
这里需要特别注意:不是直接对每个二进制位取反,而是先要转为补码,再取反计算,最后再转为原码,比如对于求~a:

  • 先求a的补码,是其本身0 0101
  • 然后按位取反得,1 1010
  • 最后再转原码得,1 0101 + 1 = 1 0110,十进制表示就是-6

同样,对于求~b:

  • 先求b的补码,1 1001 +1 = 1 1010
  • 然后按位取反得,0 0101
  • 最后再转原码得,0 0101,十进制表示就是5

原码与补码的转换规则:正数的补码是其本身,负数的补码,符号位不变,数值位取反加1

当然,对于取反操作~,你也可以直接记规律: ~x = -x -1

五、逻辑运算符

Python语言支持逻辑运算符,常用的逻辑运算符有以下三种:

运算符 逻辑表达式 描述
and x and y 布尔"与" :如果x、y存在假值,返回x;如果x、y都不是假值,则返回y
or x or y 布尔"或" :如果x、y存在真值,返回x;如果x、y都不是真值,则返回y
not not x 布尔"非" : 如果 x 为 True,返回 False 。如果 x 为 False,它返回 True。

在Python里面,0、’ ’、[]、()、{}、None均为假,其它任何东西都为真。在此基础上,下面举例演示了一下逻辑运算符的操作:

a = 5
b = 0

print("a and b =", a and b)
print("a or b =", a or b)
print("not b =", not b)

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

结果:
在这里插入图片描述

六、成员运算符

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

运算符 Value
in 如果在指定的序列中找到值返回 True,否则返回 False。
not in 如果在指定的序列中没有找到值返回 True,否则返回 False。

下面举例演示了一下成员运算符的操作:

a = 5
b = 0
list = [1, 2, 3, 4, 5, 6]

if a in list: print("a is in list !")
else: print("a is not in list !")

if b not in list: print("b is not in list !")
else: print("b is  in list !")

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

结果:
在这里插入图片描述

七、身份运算符

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

运算符 Value
is 判断两个标识符是不是引用自同一个对象
is not 判断两个标识符是不是引用自不同对象

函数 id() 用于获取对象内存地址。下面举例演示了一下身份运算符的操作:

a = 5
b = 5
print("id(a) =", id(a), "id(b) =", id(b))
if a is b: print("a,b是引自同一个对象的变量\n")
else: print("a,b是引自不同对象的变量\n")

b = 10  # 修改b
print("id(a) =", id(a), "id(b) =", id(b))
if a is b: print("a,b是引自同一个对象的变量")
else: print("a,b是引自不同对象的变量")

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

结果:
在这里插入图片描述

八、运算优先级

下表按从高到低的优先级顺序列出了所有运算符:

运算符 项目
** 算术运算符
~ + - 三个符号分别表示:按位反转、一元加号(正号)、一元减号(负号)
* / % // 算术运算符
+ - 算术运算符
>> << 位运算符
& 位运算符
^ | 位运算符
<= < > >= 比较运算符
== != 比较运算符
= %= /= //= -= += *= **= 赋值运算符
is is not 身份运算符
in not in 成员运算符
not and or 逻辑运算符

文章来源: ai-wx.blog.csdn.net,作者:AI 菌,版权归原作者所有,如需转载,请联系作者。

原文链接:ai-wx.blog.csdn.net/article/details/111502693

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。