Python3运算符
之前本来是打算一节讲完Python3的变量类型,但是在写变量类型的讲解文章的时候发现一节的内容根本hold不住,必须要分多个小节才能将Python3的变量类型讲明白,所以写了6篇文章才算是讲完了第2节的内容。
相较而言,Python3的运算符相比变量类型来说就简单很多了,一节足矣!
什么是运算符?
举个最简单的例子:+-×÷四则运算符,相信这个就不用多解释了。
以加法运算符为例:1+2,+号就是运算符,1和2叫做操作数。
下面,我将Python中的运算符分类给大家介绍一下。
Python支持的运算符可以分为如下几种:
算术运算符
四则运算符(+-*/)就属于这类,除此之外,还有//(取整除法运算符)、%(取模运算符)、**(幂运算符)
1+2-3*4///3#%3#12**8#
逻辑运算符
逻辑运算符有3个:and(与运算符)、or(或运算符)、not(非运算符)。
在这里需要提一个概念——布尔值(bool值、boolean值),布尔值有True和False两种,一般用于判断条件真假。
and运算符1and2#21and0#00and0#00andx#01andx#NameError:namexisnotdefinedFalseandTrue#False思考1:上述第5行代码为何会报错?思考2:除了0和False,还有哪些也是等价于False的值?or运算符
0or1#12or1#22orx#20orx#NameError:namexisnotdefined思考3:上述第4行代码为何会报错?not运算符
not0not10notTruenotFalse
位运算符
首先需要明确什么是“位”,这个要从二进制数字讲起,我这里简单讲解一下,如果还是不懂就自行请教度娘,学习一下这个基础知识。
十进制数字,也就是我们一年级就学习的数字,大家都知道位是“个十百千万”,每一位的取值都是0-9。
比如:=5*+6*+2*10+9*1=5*10^3+6*10^2+2*10^1+2*10^0
所以,用科学计数法来描述十进制数字,个位的量级是10^0(10的零次方),十位是10^1,百位是10^2,依次类推。
那么,二进制数字呢?
二进制数字的每一位上取值只有0和1,所以二进制数字都是由0和1组成的,比如:、、11。
转换成10进制数需要这样计算:
=2^3+2^2+0*2^1+2^0=8+4+0+1=13
用python来表示二进制数,需要在数字前加上0B或者0b前缀。B和b是二进制英文Binary的缩写。
b=0bprint(b)#13print(bin(b))#0b
补充知识点:
·8进制数字是由0-7组成的,在Python中表示10进制数字8为:0O10、0o37。其中O和o是8进制英文Octal的缩写。
·超过10个数字的怎么表示呢?
那就需要用其他字符代替数字了,16进制数字是0-9外加A-F六个字母组成的,比如:0X1A、0x9F。其中,X和x是16进制英文Hexadecimal的缩写,A-F对应的10进制数是10-15。
(据说玛雅文明的数字计数是20进制,可能是因为他们的祖先在数数的时候连脚指头都用上了,当时还没有阿拉伯数字和字母,不知道当时玛雅人是用的字符在计数)
作业1:尝试将0b111、0o和0x1F转换为十进制数。
作业2:如果采用7进制计数,10进制数65要怎么表示呢?
在了解了数字进制的基本知识后,下面咱们就开始学习位运算符了。
位运算符是专门针对二进制数进行计算的,包括(位与)、
(位或)、^(异或)、~(取反)、span=""(左移)和(右移)。
计算口诀如下:
:全1为1:见1为1^:不同为1下面我们来看看具体的例子:
a=0b1#12b=0b0#10ab#0b-8a
b#0b-14a^b#0b-6
取反运算符的计算过程比较特殊,涉及到计算机的原码、反码和补码的概念,在这里先不详细讲解(我在后续的文章中会进行一个补充讲解),在这里只需要记住一个简单的计算公式:
~a==-(a+1)
a=0b1#12b=0b0#10~a#-0b--13~b#-0b1--11~~a#0b1-12
左移和右移运算比较好理解,就是将数字的所有位按照相应的移动,用0补上空位。
聪明的你,一定会发现这个规律,左移1位相当于*2,右移1位相当于/2。
a1#0b1-24a4#0b0-a1#0b-6a3#0b-1a4#0b-0
讲到这里,又不得不提一下数值的取值范围,在其他语言中,每种类型的数值都有一个取值范围,这个范围和计算机的位数有关。
以32位的计算机来说,无符号整型(unsignedint)的数值取值范围为0~,有符号整型(int)的数值取值范围为:-~。所以,当运算结果的数值超出了这个范围之后,就会出现数值溢出的情况。比如下面这段C语言代码就会出现数值溢出的情况:
voidmain(){unsignedintx=;printf("%d\n",x);//x++;printf("%d\n",x);//-}
Python3已经帮我们解决了这个数值取值范围的问题,所以暂时不用考虑数值溢出的问题了。
不信?你可以运行一下看看2**0的值是多少。
赋值运算符
这个运算符比较好理解,就是将数值赋予一个对象。比如:a=1,其中,=就是赋值运算符。
Python3里的赋值运算符如下所示:以a+=2为例,等价于a=a+2,其他的赋值运算符都是同样的规则,大家可以自行试验。
另,python3.8版本中新增了一个新的运算符——海象运算符:=
这个赋值运算符是由:和=组成的,:=看起来就像海象的眼睛和牙齿(外国程序猿还是很可爱的,对吧?)。
由于海象运算符用起来比其他的运算符要复杂一些,这个我将在后面的文章中再详细介绍。
比较运算符
Python3中的比较运算符有:、、=、=、==和!=
这些运算符主要用于条件判断的语句,比如:
a=int(input(a=))b=int(input(b=))ifab:print(a大于b)else:print(a小于等于b)
成员运算符
成员运算符包括:in和notin。
其中,in和notin是用于判断一个非序列对象是否在序列对象中。比如:
a=1l=[1,2,3]ifainl:print(对象%s在对象%s中%(a,l))
身份运算符
身份运算符包括:is和isnot。(注意不是notis)
is和isnot是用于判断两个变量引用的对象是否同一个对象。比如:
a=1b=ac=1print(id(a),id(b),id(c))print(aisb)#Trueprint(aisnotc)#Falsel1=[1,2,3]l2=[1,2,3]l3=l1[:]print(l1isl2)#Trueprint(l1isl3)#Falseprint(l1==l3)#True
注意is和==的区别,is是判断2个变量引用的对象是否为同一个对象,而==是判断2个变量引用的对象的值是否相等。
讲到这里,相信大家应该已经知道了这些运算符要如何使用了。
不过,还有最后一点需要大家记住的知识点——运算符的优先级。
什么是运算符优先级?
拿四则运算符来说,小学时我们学过这样一个口诀:“先乘除,后加减”。这个就是乘除运算符的优先级要高于加减运算符的意思。
在没有括号的情况下,计算顺序是从左往右优先计算优先级高的运算符。
下图展示了Python3中的运算符优先级列表。大家先花5分钟努力记住这个优先级的顺序,记不住也没关系,今后在实际编程的过程中,多用用就熟练了。
好了,今天的课程就到这里,主要讲解了Python3中的运算符,下节课我们将学习Python的条件语句。
预览时标签不可点收录于话题#个上一篇下一篇