目录
一、运算符是什么?
运算符是用于数学计算,比较大小和逻辑运算的符号。python中主要有以下几类运算符:
-
算术运算符
-
比较(关系)运算符
-
赋值运算符
-
逻辑运算符
-
位运算符
-
成员运算符
-
身份运算符
二、算数运算符
算数运算符主要用于数学运算,部分运算符也可以用于其他数据类型的运算。
运算符 | 描述 | 示例 |
+ | 加法运算 | 3+4 输出结果7 |
- | 减法运算 | 3-4 输出结果-1 |
* | 乘法运算 | 3*4 输出结果12 |
/ | 除法运算,结果是浮点数 | 3/4 输出结果0.75 |
// | 整除运算,结果只保留整数部分,不四舍五入 | 3//4 输出结果0 |
% | 取余运算(模运算),获取余数 | 3%4 输出结果3 |
** | 幂运算 | 3**4 输出结果81 |
加号还可以用于字符串、列表、元组的拼接。
乘号的一些特殊用法。乘号可以将字符串、列表、元组重复n次,相当于相加n次。
三、比较(关系)运算符
比较运算符主要用于两个对象的大小比较,返回一个布尔值。
运算符 | 描述 | 示例 |
== | 相等,比较两个对象是否相等 | 3 == 4 输出结果False |
!= | 不相等,比较两个对象是否不相等 | 3 != 4 输出结果True |
> | 大于,比较前一个对象是否大于后一个对象 | 3 > 4 输出结果False |
< | 小于,比较前一个对象是否小于后一个对象 | 3 < 4 输出结果True |
>= | 大于等于,比较前一个对象是否大于等于后一个对象 | 3 >= 4 输出结果False |
<= | 小于等于,比较前一个对象是否小于等于后一个对象 | 3 <= 4 输出结果True |
字符串比较。
为什么a > b的返回值是True呢?因为a和b的数据类型是字符串,字符串的比较是从左至右按照字符的编码值进行比较(可以通过ord()函数获取字符的编码值),‘2’的编码值是50,‘1’的编码值是49,所以得出的结果是True。如果比较的结果是相等的,那么会比较下一位字符,直到比较完所有字符。
四、赋值运算符
赋值运算符主要用于创建变量或更新变量的值。
运算符 | 描述 | 示例 |
= | 基本赋值运算符 | 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 |
要注意的一点是 c += a 是等效于c = c + a而不是c= a + c。为什么强调这一点呢,因为在做字符串运算时有个顺序问题。例如:
在某些情况下,会循环做字符串的拼接,使用时要注意这个问题。
五、逻辑运算符
逻辑运算符用来表示日常交流中的“并且”,“或者”,“除非”等思想。分别对应着and、or、not(与运算、或运算、非运算)。逻辑运算符能把语句连接成更复杂的语句。
与运算(and)
布尔值全为True则结果为True。真值表:
A | B | 结果 |
0 | 0 | 0 |
0 | 1 | 0 |
1 | 0 | 0 |
1 | 1 | 1 |
可以理解成A*B,零乘以任何数都为零。
或运算(or)
布尔值有一个为True则结果为True。真值表:
A | B | 结果 |
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 1 |
或运算可以理解成A+B,只要有一个数为1则结果为1。
非运算(not)
原先为True则非运算结果为False。真值表:
A | 结果 |
0 | 1 |
1 | 0 |
逻辑运算符的优先级
not > and > or
判断数据的布尔值
数据的布尔值为True的情况有很多,但是结果为False的情况是有限的,我们只需要记住布尔值为False的情况即可。下表是常见的布尔值为False的情况:
数据 | 描述 |
False | 布尔值 |
None | None类型 |
0 | 整数 |
0.0 | 浮点数 |
'' | 空字符串 |
[] | 空列表 |
() | 空元组 |
{} | 空字典 |
set() | 空集合 |
另外可以通过使用内置函数bool(数据)来判断变量的布尔值。
bool(0.0)
逻辑运算
a = not 1 or 0 and 1
运算过程:
按照逻辑运算符的优先级:
1. not 1 结果为False
2. 0 and 1 结果为0,与运算先看and左侧,如果左侧布尔值为False,那么就不会再看右侧的值,所以结果为0
3. False or 0 结果为0,or运算先看or左侧,如果左侧布尔值为False,那么会再看右侧的值,所以最后的结果为0,即a的值为0,而不是False,这里大家一定要注意哦!
其实这也让我们给变量赋值有了更方便简洁的方式,如下面的例子:
我们在给c赋值的时候,有时候需要先判断a的布尔值是否为False,如果为False那么就赋值b。传统写法:
if bool(a):
c = a
else:
c = b
而通过逻辑运算符一句话就可以搞定哦。
六、位运算符
位运算是程序设计中对位模式或按位或二进制数的一元和二元操作。
位运算符 | 描述 | 示例 |
& | 从左按位与 | 2&1结果0 |
| | 从右按位或 | 2|1结果3 |
^ | 按位异或,相同为0,不同为1 | 2^1结果3 |
~ | 按位取反 | ~2结果为-3 |
<< | 左移运算符 | 4<<2结果为16 |
>> | 右移运算符 | 4>>2结果为1 |
七、成员运算符
成员运算符是用于检查字符串、列表、元组、集合、字典之类的序列中是否存在某个值的运算符。
成员运算符有两个:
运算符 | 描述 | 示例 |
in | in 如果在指定的序列中找到值返回 True,否则返回 False | 'a' in 'apple',返回值True |
not in | not in 如果在指定的序列中没有找到值返回 True,否则返回 False | 'x' not in ['1',2,'x'] |
八、身份运算符
身份运算符用于对对象执行比较操作,即这些运算符检查两个操作数是否引用相同的对象(具有相同的存储位置)。其本质就是判断两个变量的id值是否相等。a=10,b=10
运算符 | 描述 | 示例 |
is | is 是判断两个标识符是不是引用自一个对象 x is y, 类似 id(x) == id(y) , 如果引用的是同一个对象则返回 True,否则返回 False | a is b 结果是True |
is not | is not 是判断两个标识符是不是引用自不同对象 x is not y , 类似 id(a) != id(b)。如果引用的不是同一个对象则返回结果 True,否则返回 False。 | a is not b 结果是False |
is 与 ==的区别:
-
is用于判断两个变量引用对象是否为同一个,即id(a)是否等于id(b)
-
==用于判断引用变量的值是否相等,即a是否等于b
由这个示例可以看出,a和b的值虽然相等,但是a和b是两个不同的对象,因为他们的id值是不同的。
九、运算符的优先级
当一个表达式中出现多个运算符时,就需要根据运算符的优先级进行运算。就像数学中的四则运算中先乘除后加减一样。
只需要记住算数运算符优先级最高,逻辑运算符优先级最低。算数运算符中幂运算优先级最高,逻辑运算符中or运算优先级最低。
总结
运算符是编程的基础,要数量掌握各种运算符的使用。在使用运算符时,要注意运算符的优先级。