零基础入门学习Python(第2版)
上QQ阅读APP看书,第一时间看更新

3.10 常用操作符

视频讲解

3.10.1 算术操作符

Python的算术操作符大多数和大家知道的数学运算符一样:

+ - * / % ** //

前面四个就不用介绍了,加、减、乘、除,大家都懂。不过下面要介绍的小技巧倒不是所有人都知道的。

例如,当想对一个变量本身进行算术运算的时候,是不是会觉得写a = a + 1或b =b-3这类操作符特别麻烦?没错,在Python中可以做一些简化:

     >>> a = b = c = d = 10
     >>> a += 1
     >>> b -= 3
     >>> c *= 10
     >>> d /= 8
     >>> print(a, b, c, d)
     11 7 100 1.25

如果使用过Python 2.x版本的读者可能会发现,Python 3的除法变得有些不同了。很多编程语言中,整数除法一般都是采用floor的方式,有些书籍将其直接翻译为地板除法。地板除法的概念是:计算结果取比商小的最大整型值(也就是舍弃小数,取整的意思)。

但是在这里我们发现,即使是进行整数间的除法,结果却是返回一个浮点型的精确数值,也就是Python采用真正的除法代替了地板除法。

那有些朋友不乐意了:“萝卜、青菜各有所爱,我就喜欢原来的除法,整数除以整数就应该得到一个整数!”,于是Python的团队也为此想好了办法,就是大家看到的双斜杠,它执行的就是地板除法的操作:

     >>> 3 // 2
     1
     >>> 3.0 // 2
     1.0

注意:

使用地板除法,无论是整型还是浮点型,都将舍弃小数部分。

关于Python 3在除法运算上的改革,支持和反对的几乎各占一半。有些人支持这种做法,因为Python的除法运算从一开始的设计就是失误的,他们想要真正的除法;但有些人又不想因此修改自己的海量代码……无论怎样,这已经是板上钉钉的事情了。Python团队秉承着执着、追求完美的信念不断打造和改进Python,就这件事情本身我们就应该为其点赞。

百分号(%)表示求余数的意思:

     >>> 5 % 2
     1
     >>> 4 % 2
     0
     >>> 520 % 14
     2

3.10.2 优先级问题

当一个表达式存在多个运算符的时候,就可能会发生以下对话。

加法运算符说:“我先到的,我先计算!”

乘法运算符说:“哥我运算一次够你翻几个圈了,哥先来!”

减法运算符说:“你糊涂了,我现在被当成负号使用,没有我,你们再努力,结果也是得到相反的数!”

除法运算符这时候默默地说:“抢吧抢吧,我除以零,大家同归于尽!”

为了防止以上矛盾的出现,我们规定了运算符的优先级,当多个运算符同时出现在一个表达式的时候,严格按照优先级规定的级别来进行运算。

先乘、除,后加、减,如有括号先运行括号里边的。没错,从小学我们就学到了运算符优先级的精髓,在编程中也是这么继承下来的。

举个例子:

     -3 * 2 + 5 / -2 - 4

相当于:

     (-3) * 2 + 5 / (-2) - 4

其实多做练习自然就记住了,不用刻意去背。当然,在适当的地方加上括号强调一下优先级,小甲鱼觉得会是更好的方案。

Python还有一个特殊的乘法,就是双星号(**),也称为幂运算操作符。例如3**2,双星号左侧的3称为底数,右侧的2称为指数,把这样的算式称为3的2次幂。

在使用Python进行幂运算的时候,需要注意的一点是优先级问题。举个例子:

     >>> -5 ** 2
     -25
     >>> 5 ** -2
     0.04

从上面的结果可以看出:幂运算操作符比其左侧的一元操作符优先级高,比其右侧的一元操作符优先级低。

3.10.3 比较操作符

比较运算符包括:

< <= > >= == !=

比较操作符根据表达式的值的真假返回布尔类型值:

     >>> 3 < 4
     True
     >>> 1 + 1 >= 2
     True
     >>> 'a' > 'b'
     False
     >>> 5 / 2 <= 3
     True
     >>> 5 > 3 < 4
     True

3.10.4 逻辑操作符

逻辑操作符包括:

and or not

and操作符之前已经学习过,在实例中也多次使用。当只有and操作符左边的操作数为True,且右边的操作符同时为True的时候,结果才为True:

     >>> 3 > 4 and 4 < 5
     False
     >>> 3 < 4 and 4 < 5
     True

or操作符与and操作符不同,or操作符只需要左边或者右边任意一边为真,结果都为真;只有当两边同时为假,结果才为假:

     >>> 3 > 4 or 4 < 5
     True
     >>> 3 > 4 or 4 > 5
     False

not操作符是一个一元操作符,它的作用是得到一个和操作数相反的布尔类型的值:

     >>> not True
     False
     >>> not 0
     True
     >>> not 4
     False

另外,可能还会看到下面这样的表达式:

     5 > 3 < 4

这在其他编程语言中可能是不合法的,但在Python中是行得通的,它事实上被解释为:

     5 > 3 and 3 < 4

将目前接触过的所有操作符优先级合并在一起,如图3-1所示。

图3-1 Python操作符优先级

请思考:(not 1) or (0 and 1) or (3 and 4) or (5 and 6) or (7 and 8 and 9)的结果应该是多少?为什么呢?