Python 运算符

Jinku Hu 2023年1月30日 2018年2月26日
  1. Python 算术运算符
  2. Python 比较运算符
  3. Python 逻辑运算符
  4. Python 位运算符
  5. Python 赋值运算符
  6. Python 特殊运算符
Python 运算符

我们将在这一节里介绍 Python 运算符的相关知识。

运算符是对操作数 (值或变量) 执行特定操作的特殊符号, 例如, 在 a + b 中, + 是操作变量 a 和 b 的运算符, 这些变量称为操作数。

下面是 Python 运算符的一些类型:

Python 算术运算符

算术运算符对变量进行加法、减法、乘法等算术运算的运算符。

以下表格列出了 Python 算术运算符以及示例:

运算符 描述 例子
+ 加法运算 a + b, +a
- 减法运算 a - b, -a
* 乘法运算 a * b
/ 除法运算,结果总是返回浮点类型。 a / b
% 求余运算 a % b
// 取整除,结果返回舍去小数部分的整数 a // b
** 幂运算,返回 x 的 y 次方 a ** b

Python 算术运算符实例

下面的代码中是, 算术运算符用于两个操作数的例子:

a = 24
b = 7
print('a + b =', a+b)
print('a - b =', a-b)
print('a * b =', a*b)
print('a / b =', a/b)
print('a // b =', a//b)
print('a ** b =', a**b)
a + b = 31
a - b = 17
a * b = 168
a / b = 3.4285714285714284
a // b = 3
a ** b = 4586471424

Python 比较运算符

比较运算符是用来比较两个值大小的运算符,运算符的结果是二选一,True 或是 False

下面列举出 Python 中的比较运算符:

运算符 描述 例子
> 大于 - 比较 a 是否大于 b a > b
< 等于 - 比较 a 是否小于 b a < b
== 等于 - 比较两变量是否相等 a == b
!= 不等于 - 比较两变量是否不相等 a != b
>= 大于等于 - 比较 a 是否大于或等于 b a >= b
<= 小于等于 - 比较 a 是否小于或等于 b a <= b

Python 比较运算符实例

下面举例来说明 Python 比较运算符的应用。

a = 12
b = 24
print('a > b is ', a>b)
print('a < b is ', a<b)
print('a == b is ', a==b)
print('a != b is ', a!=b)
print('a >= b is ', a>=b)
print('a <= b is ', a<=b)
a > b is False
a < b is True
a == b is False
a != b is True
a >= b is False
a <= b is True

Python 逻辑运算符

运算符 描述 例子
and 与运算 - 如果两侧逻辑都为 True,则结果为 True,否则为 False a and b
or 或运算 - 如果两侧逻辑有一个为 True,则结果为 True,否则为 False a or b
not 非运算 - 如果 a 为 True,返回 False; 如果 a 为 False,返回 True not a

Python 逻辑运算符实例

下面举例来说明 Python 逻辑运算符的具体应用。

a = False
b = True
print('a and b =', a and b)
print('a or b =', a or b)
print('not b =', not b)
a and b = False
a or b = True
not b = False

Python 位运算符

Python 位运算符执行位运算,其中的操作数是执行位运算的二进制数字。
下面列出来 Python 中所有的位运算符,为了方便说明,我们取 a = 4 (0b100) 以及 b = 5 (0b101):

运算符 描述 例子
& 位与操作符 - 当两侧数字在该位上都是 1 的时候,结果该位也为 1,否则为 0 a &b = 4
| 位或操作符 - 当两侧数字在该位上只要有一个是 1 的时候,结果该位为 1,否则为 0 a | b = 5
~ 位取反操作符 - 对操作数进行按位取反操作,1 变成 00 变成 1 ~a = -5
^ 位异或操作符 - 当两侧数字对应位二进制相异时,结果为 1 a^b= 1
>> 右移操作符 - 将 >> 左侧的数字右移若干位,左侧补齐 0 a >>2= 1
<< 左移操作符 - 将 >> 左侧的数字左移若干位,右侧补 0,左侧高位数舍弃 a<< 2 =16

Python 赋值运算符

赋值运算符 = 为变量分配数值。赋值运算符对变量进行初始化,比如 x = 1 将数值 1 赋值给变量 x

在 Python 中, 有复合赋值运算符, 它们是将算术运算符和赋值运算符相组合, 或者是将按位和赋值运算符相组合。

比如,x += 2 就是一个复合赋值语句, 其中 2 与变量 x 相加, 结果存储在变量 x 中。

下面是赋值运算符以及复合赋值运算符的列表。

运算符 例子 等效于
= a = 8 a = 8
+= a += 8 a = a + 8
-= a -= 8 a = a - 8
*= a *= 8 a = a * 8
/= a /= 8 a = a / 8
%= a %= 8 a = a % 8
/= a /= 8 a = a / 8
*= a *= 8 a = a * 8
&= a &= 8 a = a & 8
` =` `a
^= a ^= 8 a = a ^ 8
>>= a >>= 8 a = a >> 8
<<= a <<= 8 a = a << 8

Python 特殊运算符

在 Python 编程中, 有一些运算符具有特殊的含义, 称为特殊运算符, 例如身份运算符以及成员运算符等。In Python

身份运算符

在 Python 中, 运算符 isis not 被称为身份运算符。身份运算符用于确定两个变量是否是内存的同一部分。所以两个变量是相等的, 两个变量是相同的是两个不同的语句。两个变量假如具有相同的数值,那它们两个数值相等,但并不是同一个 Python 对象。

运算符 描述
is 两个变量具有相同的内存位置
is not 两个变量不是指向相同的内存位置

Python 身份运算符实例

下面具体来说明下 Python 身份运算符的含义,

>>> a = [1]
>>> b = [1]
>>> c = a
>>> a is b
False
>>> a is c
True

ab 虽然具有相同的数据,都是列表 [1],但它们指向的不是同一个内存对象,所以 a is not b。但 c=aa 的内存地址赋予了 c 的内存地址,所有它们指向了同一个 Python 对象,所以 a is c 是成立的。你可以用 id(x) 内置函数来具体查看变量的内存地址

>>> id(a), id(b), id(c)
(87402760L, 87404296L, 87402760L)

从结果也能看出来,ac 具有相同的内存地址,并且同 b 不同。

Python 成员运算符

在 Python 中,运算符 innot in 被称为成员运算符。成员运算符用于检查变量是否位于序列(列表,元组,字符串和字典)中。所以两个变量相等并且两个变量相同是两个不同的语句。

对 Python 字典进行运算符操作的时候,它只能检查字典中的键,而不是检查值。

运算符 描述
in in 前面的变量后面的序列中时,结果为 True
not in in 前面的变量不在后面的序列中时,结果为 True

Python 成员运算符实例

>>> a = 'Python Programming'
>>> print('y' in a)
True
>>> print('b' not in a)
True
>>> print('b' in a)
False
>>> x = {1:2;3:4}
>>> 1 in a
True
>>> 2 in a
False

y 存在于序列 a(字符串)中,因此 y in a 返回 True。类似地,b 不存在 a 中,所以返回 False

字典 x 具有两个键 13,它们的值分别是 241 是字典的键,所以 1 in a 成立;虽然 2 是字典中某个键的值,但并不是键,所以 2 in a 并不成立。

Author: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn