第二章 Python的基本语法
3.1 运算符
什么是运算符呢?其实很简单,我们数学上学习到的加减乘除就是运算符,还有前面学习到的赋值语句“等于号”也是运算符。很多高级编程语言会将常用的运算符设计成一样,像Java、C、JavaScript等等,常用的运算符基本上一致,可以降低学习的成本。而且运算符是十分常用的,所以一般都会设计得比较简便且容易理解,以提高编写效率。下面列举Python得运算符,这些也不用特意去记,用着用着就记得,不记得就多查查,多看几遍就记得了。
1、Python的运算符分为一下几类:(分类什么的也不用去记得,无非就为了记忆或者查阅的时候方便)
算术运算符
比较(关系)运算符
赋值运算符
逻辑运算符
位运算符
成员运算符
身份运算符
以下使用例子,a = 3, b = 4
① 算术运算符
(加减乘除我们不多介绍了,跟数学上使用差不多,但需要说明的是,不仅仅是数字,字符串也能加、乘,后面我们讲字符串我们再细说)
运算符 | 描述 | 举例 |
+ | 加 | 略 |
- | 减 | 略 |
* | 乘 | 略 |
/ | 除 | 略 |
% | 取余数 | >>> b % a 1 |
** | 求幂,相当于计算器的xy | >>> a ** b 81 |
// | 取整除,取较小的整数,不是四舍五入 | >>> 5 // 2 2 >>> -5 // 2 -3 |
② 比较运算符
比较运算符是用来比较用的,比如说大于、小于之类的我们都懂,我们使用比较运算符就可以设置很多逻辑性的操作,举个例子,现在是8:30,分钟数minutes是30,我们设置闹钟,如果minutes大于等于45分的时候,给我们提醒一下,这就需要比较运算符“大于等于”。比较运算符非常常用,列表如下:
运算符 | 描述 | 举例 |
== | 等于,比较对象是否相等 | >>> a == b False |
!= | 不等于,比较对象是否不相等 | >>> a != b True |
> | 大于,比较前一个对象是否大于后一个对象 | >>> a > b False |
< | 小于,比较前一个对象是否小于后一个对象 | >>> a < b True |
>= | 大于等于,比较前一个对象是否大于或等于后一个对象 | >>> a >= b False |
<= | 小于等于,比较前一个对象是否小于或等于后一个对象 | >>> a <= b True >>> 4 <= b True |
③ 赋值运算符
我们前面知道了给变量赋值用赋值运算符是用一个等于号,假如有一个变量c = 10,那要给这个变量加1,我们可以写成c = 11。那如果我们不知道c的数值是多少,而还想给这个数值加1 的话应该怎么写?可以写成 c = c + 1,意思就是讲c的值 + 1 之后再赋值给c,我们是从右读向左的,跟我们数学上的使用习惯 1 + 1 = 2 是不一样的,这不是比较的关系。python的设计为了让 c = c + 1 之类的常用写法更加简便,设计了简化的赋值运算符 += 等等运算符,比如 c = c + 1 可以简写成 c += 1 。
运算符 | 描述 | 举例 |
= | 赋值运算符,将等号右边的运算结果赋值给左边 | 略 |
+= | 加法运算符,将等号左边的对象加上等号右边的运算结果,其结果赋值给等号左边 | 略 |
-= | 减法运算符,将等号左边的对象减去等号右边的运算结果,其结果赋值给等号左边 | b -= a 等效于 b = b - a |
*= | 乘法运算符,以减法运算符类推 | 略 |
/= | 除法运算符,以减法运算符类推 | 略 |
%= | 求余运算符,以减法运算符类推 | 略 |
**= | 幂运算符,以减法运算符类推 | 略 |
//= | 取整除运算符,以减法运算符类推 | 略 |
:= | 海象运算符(因为看起来像海象而得名),可在表达式内部为变量赋值。Python3.8之后新增的运算符 | if (n := len(a)) > 10: print(f"打印n的值: ({n})") 这个例子中使用了海象运算符可以比原先未使用的写法少调用了一次len() |
④ 位运算符
我们如果有阅读附录一二进制相关的内容,我们就能了解什么是位的概念,也就是二进制的换算。位的计算在一些领域的使用还是蛮多的,读取文件也可以按位读取。这里不详细讲位运算,具体可以看附录一的内容,这里我们认识这些符号即可。
(按8位二进制换算,a = 3 = 0000 0011, b = 4 = 0000 0100)
运算符 | 描述 | 举例 |
& | 按位与运算符。两个值的与运算,两个相应位置都为1,该位为1,否则为0。 | a & b 换算二进制其结果为0000 0000,即为0 |
| | 按位或运算符。两个值的或运算,相应位置有一个为1,该位为1,否则为0。 | a | b 换算二进制其结果为0000 0111,即为7 |
^ | 按位异或运算符。两个值的异或运算,相应位置不同,该位为1,否则为0。 | a ^ b 换算二进制其结果为0000 0111,即为7 |
~ | 按位取反运算符。0变成1, 1变成0。 | ~a 换算二进制为 11111 1100,即为252 |
<< | 左移运算符。该值的二进制位全部左移若干位,高位超出的丢弃,低位补0 | a << 2 换算二进制为 0000 1100,即为12 |
>> | 右移运算符。该值的二进制位全部右移若干位,低位超出的丢弃,高位补0 | a >> 1 换算二进制为 0000 0001,即为1 |
⑤ 逻辑运算符
Python在设计逻辑运算符算是蛮有意思的,别的编程语言一般都是使用特殊字符,而Python并没有,比如用Python表示并的关系,用的是“and”,十分口语化,很多编程语言用的是“&&”,和位运算符相对应。逻辑运算符是十分常用的运算符,比如我们设计一个程序,用来筛选语数英三门功课都考90分以上的同学,如果使用条件判断语句没有使用逻辑运算符,我们就需要判断三次:
第一步,筛选“语文成绩 > 90”的同学;第二步,在这批筛选好的同学里面,再筛选“数学成绩 > 90”的同学;第三步,在这批筛选好的同学里面,再筛选“英语成绩 > 90”的同学。
但是如果使用逻辑运算符and,就只需要一步就能筛选:
筛选 “语文成绩 > 90” and “数学成绩 > 90” and “英语成绩 > 90” 的同学。
运算符 | 表达式 | 描述 | 举例 |
and | x and y | 与,如果x为False,x and y 返回False,否则返回y的计算值 | >>> 1 > 0 and 3 <= 5 True >>> 10 and 3 3 >>> 1 > 0 and 3 3 |
or | x or y | 或,如果x为True,返回x的值,否则返回y的计算值 | >>> 1 > 0 or 3 <= 5 True >>> 10 or 3 10 >>> 1 < 0 or 3 3 |
not | not x | 非,True变成False,False变为True | >>> not 3 False >>> not 0 # 0表示False True >>> not 1 False >>> not 1 > 0 False |
⑥ 成员运算符
成员运算符也是常用的运算符,表示某对象在不在某对象里面,比如“123”这个字符串,就被包含于“456123456”这个比较长的字符串里面。
(举例使用a = "123", b = "456123456", c = "789")
运算符 | 描述 | 举例 |
in | 判断指定对象是否在另一对象里面,有则True,没有则False | >>> a in b True >>> a in c False |
not in | 判断指定对象是否不在另一对象里面,没有则True,有则False | >>> c not in b True >>> c not in a True >>> c not in c False |
⑦ 身份运算符
身份运算符用来判断两个对象是不是同一个。比如说,变量a = 1,变量b = 1,数值相等,如果使用比较运算符 == ,判断结果是相等的,但是如果两个变量存储的数值在内存中分别存在两个位置,存储单元id不同,则用身份运算符对比是不同的。
运算符 | 描述 | 举例 |
is | 判断两个对象是否引用自同一个地址空间 | >>> a = [1,2] >>> b = [1,2] >>> a == b True >>> a is b False >>> a is not b True |
is not | 判断两个对象是否不是引用自同一个地址空间 |
2、运算符优先级问题。Python的运算符这么多,优先级是怎样的,比如,我们在数学上使用加法和乘法混合时,都会先计算乘法,那么Python会不会也先计算乘法呢?实验结果如下:
由上面结果可知,Python是有按照我们数学上的使用习惯先计算乘法再计算加法,下面表格列举了运算符的优先级顺序,由高到低排列。
运算符 | 描述 |
** | 指数,求幂(最高优先级) |
~ | 按位翻转 |
*、/、%、// | 乘、除、求余、取整除 |
+、- | 加、减 |
<<、>> | 左移、右移 |
& | 按位与 |
^、| | 位运算符 |
>、 <、 >=、 <= | 比较运算符 |
==、!= | 等于运算符 |
=、 +=、 -=、 *=、 /=、 %=、 //=、 **= | 赋值运算符 |
is、 is not | 身份运算符 |
in、 not in | 成员运算符 |
and、 or、 not | 逻辑运算符 |
原文地址:https://www.cnblogs.com/sunshinesky/p/12364705.html