程序中少了运算就如人不会说话,不会行走,便成了行尸走肉,我要要让程序动起来,自然是少不了运算。
在编程语言中运算符是一种告诉解释器或编译器执行特定的数学或逻辑操作的符号,大家注意 Python 是动态语言所以是调用解释器执行代码。
Python 语言内置了丰富的运算符,并提供了以下类型的运算符:算术运算符、比较运算符、位运算符、逻辑算符、成员运算符、身份运算符、三目算符等等。
注意:由于变量,常量,自定义类型变量都可以通过运算符进行运算,在本节的描述中,我们且把参与运算的各种类型的数据统一称为对象。
编程语言中的算符运算符和数学中的算术运算符大体一致,
但有一些地方会不同,假设对象 a = 7, b = 3
,通过各种算符运算后的结果如下表格。
算术运算符 | 解释 | 例子 |
---|---|---|
+ | 加(表示两个对象相加) | a + b 结果为 10 |
- | 减(表示两个对象相减或表示负数) | a - b 结果为 4, -a 的结果为 -7 |
* | 乘(表示两个对象相乘) | a * b 结果 为 21 |
/ | 除(表示两个对象相除) | a / b 结果为 2.3333333333333335 |
** | 幂(a的b次幂) | a ** b 结果为 343 |
// | 整除(得到商的整数部分) | a // b 结果为 2 |
% | 取模(取除法的余数) | a % b 结果为 1 |
我们要区分算术运算符 / 和 // 的区别,运算符 / 的结果和数学上的除法结果一样,而 // 的结果是取运算结果的 整数部分(注意,如果参与运算的数据有任意一个数是小数,则整数部分用浮点数表示)。
a = 7 b = 3 print(a / b) # 2.3333333333333335 print(a // b) # 取整数部分 2 a = 7.0 b = 3 print(a / b) # 2.3333333333333335 print(a // b) # 取整数部分 2,用浮点数 2.0 表示
注意:Python 语言中没有 ++ 和 -- 运算符,这两种运算符在其它语言中很常用。
编程语言中的比较运算符和数学上一致, 假设对象 a = 7, b = 3
,通过各种比较运算后的结果如下表格。
比较运算符 | 解释 | 例子 |
---|---|---|
== | 等于(判断运算的两个对象是否相等) | a == b 结果为 False |
!= | 不等于(判断运算的两个对象是否不相等) | a != b 结果为 True |
<> | 不等于(判断运算的两个对象是否不相等) | a <> b 结果为 True |
> | 大于(判断运算符左侧对象是否大于右侧对象) | a > b 结果为 True |
< | 小于(判断运算符左侧对象是否小于右侧对象) | a < b 结果为 False |
>= | 大于等于(判断运算符左侧对象是否大于等于右侧对象) | a >= b 结果为 True |
<= | 小于(判断运算符左侧对象是否小于等于右侧对象) | a <= b 结果为 False |
无论参与比较运算的是什么类型的对象,得出的结果都是布尔类型,注意:字符串做运算符 > 和 <
比较时,双方必须为字符串类型,否则语法错误 。
a = 7 b = "老鸟Python" print(a == b) # False print(a > b) # 语法报错,Python2 则可以比较 print(a < False)
注意:不要把数学中的等号 = 和程序中的等号 == 混淆,大于等于号 >= 不要写成 ≥,小于等于号 <= 不要写成 ≤。
目前我们知道 = 是赋值运算符,但在编程语言中不止一种赋值运算符,假设对象 a = 7,
b = 3
,通过各种赋值运算后的结果如下表格。
赋值运算符 | 解释 | 例子 |
---|---|---|
= | 直接赋值 | b = a 意思为 a 赋值给 b |
+= | 加运算后赋值 | b += a 意思为 b = b + a |
*= | 乘运算后赋值 | b *= a 意思为 b = b * a |
/= | 除运算后赋值 | b /= a 意思为 b = b / a |
**= | 幂运算后赋值 | b **= a 意思为 b = b ** a |
//= | 取整后赋值 | b //= a 意思为 b = b // a |
%= | 取余后赋值 | b %= a 意思为 b = b % a |
注意:对于直接赋值运算符 = 和所有算术运算符结合的间接赋值运算符, python 解释器在执行该语句时,会先把这条间接赋值运算语句进行拆分, 先执行算术运算符,然后再执行直接赋值运算符 =,最后得到算术运算符执行的结果。
a = 240 a += 10 # Python 解释器把该语句拆分成下面两句 #########################我是分割线######################## temp = a + 10 # Python 解释器先创建一个临时变量 temp a = temp # 把临时变量 temp 赋值给变量 a
虽然平时很少用到位运算符,但是在某些时候,位运算符确实能够给我们提供很好的解决方案,
位运算符是把数字看作二进制来进行计算的,假设对象 a = 7,b = 3
,对应的二进制格式为:a = 0000 0111,b = 0000 0011
,
通过各种位运算后的结果如下表格。
位运算符 | 解释 | 例子 |
---|---|---|
& | 按位与运算(双目运算:当对应的两个二进制位都为 1 则结果为 1,否则结果为 0) | b & a 结果为 3 |
❘ | 按位或运算(双目运算:当对应的两个二进制位有一个为 1 则结果为 1,否则结果为 0) | b ❘ a 结果为 7 |
^ | 按位异或运算(双目运算:当对应的两个二进制位不同时 则结果为 1,否则结果为 0) | b ^ a 结果为 4 |
~ | 按位取反运算(单目运算:对数据的每个二进制取反,既把 1 变为 0, 把 0 变为 1) | ~a 结果为 -8 |
<< | 左移运算(单目运算:运算数据的各个二进制位全部左移, << 符号右边数字指定了移动的位数,高位丢弃,低位补 0) | a << 3 结果为 56 |
>> | 右移运算(单目运算:运算数据的各个二进制位全部右移, >> 符号右边数字指定了移动的位数,低位丢弃,高位补 0) | a >> 3 结果为 0 |
注意:Python 语言中没有同或运算符,当然,我们可以对异或取反实现同或。
逻辑运算非常简单,当参与布尔运算的对象是布尔类型时,结果为布尔值。其它非布尔类型的对象进行 and 或 or
进行布尔运算时,结果是参与运算的最终类型值,但无论对什么类型的对象进行 not 运算,结果一定为布尔值。
假设对象 a = 7,b = "Hello"
,通过各种逻辑运算后的结果如下表格。
逻辑运算符 | 解释 | 例子 |
---|---|---|
and | 布尔与运算(如果 a 为真,则运算结果为 b,否则运算结果为 a | a and b 结果为 "hello" |
or | 布尔或运算(如果 a 为真,则运算结果为 a,否则运算结果为 b | a or b 结果为 7 |
not | 布尔非运算(如果 a 为真,则运算结果为 False,否则运算结果为 True | not a 结果为 False |
and 运算规则:从参与运算的第一个值开始判断,如果是假值则停止运算,如果是真值则继续往后运算,一直运算到假值或者最后一个值,运算的结果为最后一个参与运算的值; or 运算规则:从参与运算的第一个值开始判断,如果是真值则停止运算,如果是假值则继续往后运算,一直运算到真值或者最后一个值,运算的结果为最后一个参与运算的值。
a = -1 b = "" c = 0.2 print(a and b and c) # "" print(a and b or c) # 0.2 print(a or b or c) # -1 print(a or b and c) # -1
牢记比较运算符的结果永远为布尔类型值。
知道 Python 语言中各种类型的假值。
著名公司(某宝)笔试题:对于如下代码,猜一下输出值为多少,为什么?
a = -1 b = "" c = 0 print(a or b and c) # -1
-1
-1 and的优先级高于or a or (b and c)
b and c的结果为"" a or (b and c)的结果为-1
-1
运算符之间有优先级,and的优先级高于or。所以先进行b and c 运算,在进行or运算
-1
因为and的优先级高于or,先判断b and c,and遇假返回假值,b为假值,返回b的值为空,再判断a or b,or遇真返回真值,a为真值,返回a的值,-1
-1
因为and的优先级高于or,所以先看b and c,b是假值,所以结果是b,即 " " , 然后看a or b,a是真值,所以最终结果为a,即-1.
-1
先看b and c 返回结果为b
再看a or b 返回结果为a
a = -1 b = "" c = 0 print(a or b and c)
-1
-1
-1 and的优先级高于or 先 b and c,and遇假返假,返回b, " " 再 a or b,or遇真返真,返回a, -1
-1
-1
作业中最后的输出值应该为 -1。
and的优先级高于or,所以先检查b and c,and遇假返假,b与c中b为假,所以返回b的值,即:空;
接着再判断a or b,or遇真返真,所以返回a的值,即:-1
and的优先级高于or,先判断b and c,and遇假返回假值,返回b的值为空,再判断a or b,or遇真返回真值,返回a的值,-1
输出值:-1
a = -1
b = ""
c = 0
print(a or b and c)
-1
b and c:b假,结果为“”
则上式可写为:a or b,a为真,故结果为-1.
作业:-1
and优先级高于or,故将前半部分 a or b 看做一个整体,or遵循遇真则返,a = -1为真,所以输出值为-1
以前在学校的时候看老师写的代码,一句代码中,and 和 or 好几个,根本就看不懂,现在才知道代码简洁才是真理!
代码书写规范很重要,学到了,谢谢大佬~~
赋值运算符优先级最低
-1
运算符之间有优先级,and的优先级高于or。所以先进行b and c 运算,在进行or运算