目录
1.算术运算符
2.基本赋值运算符
3.位运算
4.比较运算符(关系运算符)
5.逻辑运算符
6.三目运算符
7.运算符优先级和结合性
算术运算符也即数学运算符,用来对数字进行数学运算,比如加减乘除。下表列出了 Python 支持所有基本算术运算符。
运算符 | 说明 | 实例 | 结果 |
+ | 加 | 12+13 | 25 |
- | 减 | 14-9 | 5 |
* | 乘 | 8*9 | 72 |
/ | 除 | 9/2 | 4.5 |
// | 整除(只保留商的部分) | 9/4 | 2 |
% | 取余(只保留余数部分) | 9%4 | 1 |
** | 次方运算 | 3**3 | 27 |
Python 2.x 只提供了一种除法运算,就是/
,它的行为和大部分编程语言中/
的行为是一样的:
/
两边都是整数时,结果始终是整数;如果不能除尽,就直接舍弃小数部分。/
两边有一个是小数时,结果始终是小数;如果恰好除尽,小数部分就是 0。
=
是 Python 中最常见、最基本的赋值运算符,用来将一个表达式的值赋给另一个变量。Python 中的赋值表达式也是有值的,它的值就是被赋的那个值,或者说是左侧变量的值;如果将赋值表达式的值再赋值给另外一个变量,这就构成了连续赋值。例如:a = b = c = 100;=
具有右结合性,我们从右到左分析这个表达式:
以此类推,a 的值也是 100。
= 和 == 是两个不同的运算符,= 用来赋值,而 == 用来判断两边的值是否相等,千万不要混淆。
=
还可与其他运算符(包括算术运算符、位运算符和逻辑运算符)相结合,扩展成为功能更加强大的赋值运算符,下表所示。扩展后的赋值运算符将使得赋值表达式的书写更加优雅和方便。
运算符 | 说 明 | 用法举例 | 等价形式 |
---|---|---|---|
= | 最基本的赋值运算 | x = y | x = y |
+= | 加赋值 | x += y | x = x + y |
-= | 减赋值 | x -= y | x = x - y |
*= | 乘赋值 | x *= y | x = x * y |
/= | 除赋值 | x /= y | x = x / y |
%= | 取余数赋值 | x %= y | x = x % y |
**= | 幂赋值 | x **= y | x = x ** y |
//= | 取整数赋值 | x //= y | x = x // y |
&= | 按位与赋值 | x &= y | x = x & y |
|= | 按位或赋值 | x |= y | x = x | y |
^= | 按位异或赋值 | x ^= y | x = x ^ y |
<<= | 左移赋值 | x <<= y | x = x << y,这里的 y 指的是左移的位数 |
>>= | 右移赋值 | x >>= y | x = x >> y,这里的 y 指的是右移的位数 |
Python 位运算按照数据在内存中的二进制位(Bit)进行操作,它一般用于底层开发(算法设计、驱动、图像处理、单片机等),在应用层开发(Web 开发、Linux 运维等)中并不常见。Python 位运算符只能用来操作整数类型,它按照整数在内存中的二进制形式进行计算。Python 支持的位运算符如表所示。
位运算符 | 含义 | 使用形式 | 运算逻辑 |
& | 按位与 | a & b | 按位与运算符& 的运算规则是:只有参与& 运算的两个位都为 1 时,结果才为 1,否则为 0。 |
| | 按位或 | a | b | 按位或运算符| 的运算规则是:两个二进制位有一个为 1 时,结果就为 1,两个都为 0 时结果才为 0。 |
^ | 按位异或 | a ^ b | 参与运算的两个二进制位不同时,结果为 1,相同时结果为 0。 |
~ | 按位取反 | ~a | 按位取反运算符~ 为单目运算符(只有一个操作数),右结合性,作用是对参与运算的二进制位取反。 |
<< | 按位左移 | a << b | 左移运算符<< 用来把操作数的各个二进制位全部左移若干位,高位丢弃,低位补 0。 |
>> | 按位右移 | a >> b | 右移运算符>> 用来把操作数的各个二进制位全部右移若干位,低位丢弃,高位补 0 或 1。 |
比较运算符,也称关系运算符,用于对常量、变量或表达式的结果进行大小比较。如果这种比较是成立的,则返回 True(真),反之则返回 False(假)。Python 支持的比较运算符如表所示。
比较运算符 | 说明 |
---|---|
> | 大于,如果> 前面的值大于后面的值,则返回 True,否则返回 False。 |
< | 小于,如果< 前面的值小于后面的值,则返回 True,否则返回 False。 |
== | 等于,如果== 两边的值相等,则返回 True,否则返回 False。 |
>= | 大于等于(等价于数学中的 ≥),如果>= 前面的值大于或者等于后面的值,则返回 True,否则返回 False。 |
<= | 小于等于(等价于数学中的 ≤),如果<= 前面的值小于或者等于后面的值,则返回 True,否则返回 False。 |
!= | 不等于(等价于数学中的 ≠),如果!= 两边的值不相等,则返回 True,否则返回 False。 |
is | 判断两个变量所引用的对象是否相同,如果相同则返回 True,否则返回 False。 |
is not | 判断两个变量所引用的对象是否不相同,如果不相同则返回 True,否则返回 False。 |
is 与 == 有本质上的区别,完全不是一码事儿。== 用来比较两个变量的值是否相等,而 is 则用来比对两个变量引用的是否是同一个对象。例如:
# coding=gbk ##空格都不能有,否则无法识别中文注释
import time
t1 = time.gmtime()
t2 = time.gmtime()
print(t1 == t2) ##输出True
print(t1 is t2) ##输出False
逻辑运算符 | 含义 | 基本格式 | 说明 |
and | 逻辑与运算,等价于数学中的“且 | a and b | 当 a 和 b 两个表达式都为真时,a and b 的结果才为真,否则为假。 |
or | 逻辑或运算,等价于数学中的“或” | a or b | 当 a 和 b 两个表达式都为假时,a or b 的结果才是假,否则为真。 |
not | 逻辑非运算,等价于数学中的“非” | not a | 如果 a 为真,那么 not a 的结果为假;如果 a 为假,那么 not a 的结果为真。相当于对 a 取反。 |
在 Python 中,and 和 or 不一定会计算右边表达式的值,有时候只计算左边表达式的值就能得到最终结果。另外,and 和 or 运算符会将其中一个表达式的值作为最终结果,而不是将 True 或者 False 作为最终结果。
对于 and 运算符,两边的值都为真时最终结果才为真,但是只要其中有一个值为假,那么最终结果就是假,所以 Python 按照下面的规则执行 and 运算:
对于 or 运算符,情况是类似的,两边的值都为假时最终结果才为假,只要其中有一个值为真,那么最终结果就是真,所以 Python 按照下面的规则执行 or 运算:
有些不负责任的 Python 教程说:Python 逻辑运算符用于操作 bool 类型的表达式,执行结果也是 bool 类型,这两点其实都是错误的!Python 逻辑运算符可以用来操作任何类型的表达式,不管表达式是不是 bool 类型;同时,逻辑运算的结果也不一定是 bool 类型,它也可以是任意类型。例如:
print(100 and 200)
print(45 and 0)
print("" or "http://c.biancheng.net/python/")
print(18.5 or "http://c.biancheng.net/python/")
输出为:
假设现在有两个数字,我们希望获得其中较大的一个,那么可以使用 if else 语句,例如:
if a>b:
max = a;
else:
max = b;
但是 Python 提供了一种更加简洁的写法,如下所示:max = a if a>b else b
这是一种类似于其它编程语言中三目运算符? :
的写法。Python 是一种极简主义的编程语言,它没有引入? :
这个新的运算符,而是使用已有的 if else 关键字来实现相同的功能。使用 if else 实现三目运算符(条件运算符)的格式如下:exp1 if contion else exp2
其中,condition 是判断条件,exp1 和 exp2 是两个表达式。如果 condition 成立(结果为真),就执行 exp1,并把 exp1 的结果作为整个表达式的结果;如果 condition 不成立(结果为假),就执行 exp2,并把 exp2 的结果作为整个表达式的结果。
Python 三目运算符支持嵌套,如此可以构成更加复杂的表达式。在嵌套时需要注意 if 和 else 的配对
当一个表达式中出现多个运算符时,Python 会先比较各个运算符的优先级,按照优先级从高到低的顺序依次执行;当遇到优先级相同的运算符时,再根据结合性决定先执行哪个运算符:如果是左结合性就先执行左边的运算符,如果是右结合性就先执行右边的运算符。
所谓优先级,就是当多个运算符同时出现在一个表达式中时,先执行哪个运算符。Python 支持几十种运算符,被划分成将近二十个优先级,有的运算符优先级不同,有的运算符优先级相同,请看下表:
运算符说明 | Python运算符 | 优先级 | 结合性 | 优先级顺序 |
---|---|---|---|---|
小括号 | ( ) | 19 | 无 | 高 ︿ | | | | | | | | | | | | | | | | | | | | | | 低 |
索引运算符 | x[i] 或 x[i1: i2 [:i3]] | 18 | 左 | |
属性访问 | x.attribute | 17 | 左 | |
乘方 | ** | 16 | 右 | |
按位取反 | ~ | 15 | 右 | |
符号运算符 | +(正号)、-(负号) | 14 | 右 | |
乘除 | *、/、//、% | 13 | 左 | |
加减 | +、- | 12 | 左 | |
位移 | >>、<< | 11 | 左 | |
按位与 | & | 10 | 右 | |
按位异或 | ^ | 9 | 左 | |
按位或 | | | 8 | 左 | |
比较运算符 | ==、!=、>、>=、<、<= | 7 | 左 | |
is 运算符 | is、is not | 6 | 左 | |
in 运算符 | in、not in | 5 | 左 | |
逻辑非 | not | 4 | 右 | |
逻辑与 | and | 3 | 左 | |
逻辑或 | or | 2 | 左 | |
逗号运算符 | exp1, exp2 | 1 | 左 |
所谓结合性,就是当一个表达式中出现多个优先级相同的运算符时,先执行哪个运算符:先执行左边的叫左结合性,先执行右边的叫右结合性。Python 中大部分运算符都具有左结合性,也就是从左到右执行;只有 ** 乘方运算符、单目运算符(例如 not 逻辑非运算符)、赋值运算符和三目运算符例外,它们具有右结合性,也就是从右向左执行。