算术运算符是处理四则运算的符号,在数字的处理中应用得最多。
运算符 | 说明 | 实例 | 结果 |
---|---|---|---|
+ | 加 | 12.45 + 15 | 27.45 |
- | 减 | 4.56 - 0.26 | 4.3 |
* | 乘 | 5 * 3.6 | 18.0 |
/ | 除 | 7 / 2 | 3.5 |
% | 取余,即返回除法的余数 | 7 % 2 | 1 |
// | 整除,返回商的整数部分 | 7 // 2 | 3 |
** | 幂,即返回x的y次方 | 2 ** 4 | 16,即24 |
例如如下代码:
a = 5.2
b = 3.1
the_sum = a + b
# sum的值为8.3
print("the_sum的值为:", the_sum)
除此之外,“+”
还可以作为字符串(包括后续要介绍的序列)的连接运算符。例如如下代码:
s1 = 'Hello, '
s2 = 'Charlie'
# 使用+连接两个字符串
print(s1 + s2)
例如如下代码:
c = 5.2
d = 3.1
sub = c - d
# sub的值为2.1
print("sub的值为:", sub)
此外,“-”
除了可以作为减法运算符之外,还可以作为求负的运算符。请看如下代码:
# 定义变量x,其值为-5.0
x = -5.0
# 将x求负,其值变成5.0
x = -x
print(x)
例如如下代码:
e = 5.2
f = 3.1
multiply = e * f
# multiply的值为16.12
print("multiply的值为:", multiply)
此外,“*”
还可以作为字符串(包括后续要介绍的序列)的连接运算符,表示将N
个字符串连接起来。例如如下代码:
s3 = 'crazyit '
# 使用*将5个字符串连接起来
print(s3 * 5)
上面代码将会输出:
crazyit crazyit crazyit crazyit crazyit
Python
的除法运算符有两个:“/”
表示普通除法,使用它除出来的结果与平常数学计算的结果是相同的(即除不尽时,会产生小数部分);而“//”
表示整除,使用它除出来的结果只有整数部分,小数部分将会被舍弃。
记住,在Python 3.x中,除法运算的结果都是浮点类型。
例如如下代码:
print("19/4的结果是:", 19/4)
print("19//4的结果是:", 19//4)
aa = 5.2
bb = 3.1
# aa / bb的值将是1.67741935483871
print("aa/bb的值是:", aa / bb)
# aa // bb值将是1.0
print("aa//bb的值是:", aa // bb)
Python
不要求求余运算符的两个操作数都是整数,Python
的求余运算符完全支持对浮点数求余。求余运算的结果不一定总是整数,它是使用第一个操作数来除以第二个操作数,得到一个整除的结果后剩下的值就是余数。
由于求余运算也需要进行除法运算,因此求余运算的第二个操作数不能是 0,否则程序会报出ZeroDivisionError
错误。
例如如下程序:
print("5%3的值为:", 5 % 3) # 输出2
print("5.2%3.1的值为:",5.2 % 3.1) # 输出2.1
print("-5.2%-3.1的值为:", -5.2 % -3.1) # 输出-2.1
print("5.2%-2.9的值为:", 5.2 % -2.9) # 输出-0.6
print("5.2%-1.5的值为:", 5.2 % -1.5) # 输出-0.8
print("-5.2%1.5的值为:", -5.2 % 1.5) # 输出0.8
#print("5对0.0求余的结果是:", 5 % 0.0) # 导致错误
Python
支持使用“**”
作为乘方运算符,这是一个使用非常方便的运算符。由于开方其实是乘方的逆运算,因此实际上使用“**”
也可进行开方运算。例如如下代码:
print('5 的 2 次方:', 5 ** 2) # 25
print('4 的 3 次方:', 4 ** 3) # 64
print('4 的开平方:', 4 ** 0.5) # 2.0
print('27 的开 3 次方:',27 **(1 / 3 )) # 3.0
python
使用“=”
作为赋值运算符,常用于将表达式的值赋给另一个变量。例如如下代码:
# 为变量st赋值为
Pythonst = "Python"
# 为变量pi赋值为3.14
pi = 3.14
# 为变量visited赋值为True
visited = True
除此之外,也可使用赋值运算利将一个变量的值赋给另一个变量。例如,如下代码也是正确的:
# 将变量st的值赋给st2
st2 = st
print(st2)
=
赋值运算符还可与其他运算符(算术运算符、位运算符等)结合,成为功能更强大的赋值运算符。
运算符 | 说 明 | 举 例 | 展开形式 |
---|---|---|---|
= | 最基本的赋值运算 | 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 | |
^= | 按位异或赋值 | x ^= y | x = x ^ y |
<<= | 左移赋值 | x <<= y | x = x << y,这里的y指的是左移的位数 |
>>= | 右移赋值 | x >>= y | x = x >> y,这里的y指的是右移的位数 |
这里举几个简单的例子:
a = 1
b = 2
a += b
print("a+b=",a)#1+2=3
a -= b
print("a-b=",a)#3-2=1
a *= b
print("a*b=",a)#1*2=2
a /= b
print("a/b=",a)#2/2=1.0
a %= b
print("a%b=",a)#1%2=1.0
c = 0
d = 2
c &= d
print("c&d=",c)#0&2=0
c |= d
print("c|d=",c)#0|2=2
运行结果为:
a+b= 3
a-b= 1
a*b= 2
a/b= 1.0
a%b= 1.0
c&d= 0
c|d= 2
位运算符的操作对象是整数类型,它会把数字看做对应的二进制数来进行计算。
位运算符 | 说 明 | 使用形式 | 举 例 |
---|---|---|---|
& | 按位与 | a & b | 4 & 5 |
按位或 | a | b | ||
^ | 按位异或 | a ^ b | 4 ^ 5 |
~ | 按位取反 | ~a | ~4 |
<< | 按位左移 | a << b | 4 << 2,表示数字4按位左移2位 |
>> | 按位右移 | a >> b | 4 >> 2,表示数字4按位右移2位 |
按位与运算的运算符是&
,它有2
个操作数,其运算法则是,按位将2
个操作数对应的二进制数一一对应,只有对应数位都是1
时,此为对应的结果位才是1
;反之,就是0
。
第一个操作数 | 第二个操作数 | 结果位的值 |
---|---|---|
0 | 0 | 0 |
0 | 1 | 0 |
1 | 0 | 0 |
1 | 1 | 1 |
例如,在Python
交互式解释器中,计算12 & 8
的值,执行过程如下:
>>> 12 & 8
8
按位或运算的运算符是|
,它有2
个操作数,运算法则是,按位将2
个操作数对应的二进制数一一对应,只有对应数位都是0
,所得结果才是0
;反之,就是1
。
第一个操作数 | 第二个操作数 | 结果位的值 |
---|---|---|
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 1 |
例如,在Python
交互式解释器上计算4 | 8
的值,执行过程如下:
>>> 4 | 8
12
按位异或运算的运算符是^
,它有2
个操作数,运算法则是,按位将 2
个操作数对应的二进制数一一对应,当对应位的二进制值相同(同为0
或同为1
)时,所得结果为 0
;反之,则为1
。
第一个操作数 | 第二个操作数 | 结果位的值 |
---|---|---|
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 0 |
例如,在Python
交互式解释器中,计算31 ^ 22
的值,其执行过程为:
>>> 31 ^ 22
9
按位取反,也常称为“按位非”运算,此运算的运算符为~
,它只有1
个操作数,其运算法则为:将操作数的所有二进制位,1
改为0
,0
改为1
。
>>> ~-5
4
注意,此运算过程涉及与计算机存储相关的内容,首先需要了解什么是原码、反码以及补码:
0
代表正数,符号位为 1 代表负数。无符号整数则没有符号位,因此无符号整数只能表示0
和正数。+1
;左移运算符是将操作数补码形式的二进制数,整体左移指定位数,左移后,左边溢出的位直接丢弃,右边空出来的位以0
来填充。例如如下代码:
>>> 5 << 2
20
>>>-5 << 2
-20
Python
的右移运算符为>>
,其运行法则是,把操作数补码形式的二进制右移指定位数后,左边空出来的位以符号位来填充,右侧溢出位直接丢弃。
>>> -5 >> 2
-2
比较运算符,也成关系运算符,用于对常量、变量或表达式的结果进行大小、真假等比较,如果比较结果为真,则返回True
;反之,则返回False
。
比较运算符 | 功能 |
---|---|
> | 大于,如果运算符前面的值大于后面的值,则返回True;否则返回False |
>= | 大于或等于,如果运算符前面的值大于或等于后面的值,则返回True;否则返回False |
< | 小于,如果运算符前面的值小于后面的值,则返回True;否则返回False |
<= | 小于或等于,如果运算符前面的值小于或等于后面的值,则返回True;否则返回False |
== | 等于,如果运算符前面的值等于后面的值,则返回True;否则返回False |
!= | 不等于,如果运算符前面的值不等于后面的值,则返回True;否则返回False |
is | 判断两个变量所引用的对象是否相同,如果相同则返回True |
is not | 判断两个变量所引用的对象是否不相同,如果不相同则返回True |
下面程序示范了比较运算符的基本用法:
>>> print("5是否大于 4:", 5 > 4)
5是否大于 4: True
>>> print("3的4次方是否大于等于90.0:", 3 ** 4 >= 90)
3的4次方是否大于等于90.0: False
>>> print("20是否大于等于20.0:", 20 >= 20.0)
20是否大于等于20.0: True
>>> print("5和5.0是否相等:", 5 == 5.0)
5和5.0是否相等: True
>>> print("True和False是否相等:", True == False)
True和False是否相等: False
>>>
==
和is
的区别==
用来比较两个变量的值是否相等,而is
则用来比对两个变量引用的是否是同一个对象,例如:
import time
# 获取当前时间
a = time.gmtime()
b = time.gmtime()
print(a == b) # a和b两个时间相等,输出True
print(a is b) # a和b不是同一个对象,输出False
上面代码中a
、b
两个变量都代表当前系统时间,因此a
、b
两个变量的时间值是相等的(代码运行速度很快,能保证是同一时间),故程序使用“==”
判断返回True
。但由于a
、b
两个变量分别引用不同的对象(每次调用gmtime()
函数都返回不同的对象),因此a is b
返回False
。
Python
提供了一个全局的id()
函数,它可以用来判断变量所引用的对象的内存地址,如果两个对象所在的内存地址相同,则说明这两个对象其实是同一个对象。
再举一个例子:
>>> a = 'cheesezh'
>>> b = 'cheesezh'
>>> id(a)
2680257978480
>>> id(b)
2680257978480
>>> a is b
True
逻辑运算符是对真和假两种布尔值进行运算(操作bool
类型的变量、常量或表达式),逻辑运算的返回值也是 bool
类型值。
Python
中的逻辑运算符主要包括and
(逻辑与)、or
(逻辑或)以及not
(逻辑非)
逻辑运算符 | 含义 | 基本格式 | 功能 |
---|---|---|---|
and | 逻辑与(简称“与”) | a and b | 有2个操作数a和b,只有它们都是True时,才返回True,否则返回 False。 |
or | 逻辑或(简称“或”) | a or b | 有2个操作数a和b,只有它们都是False时,才返回False,否则返回True。 |
not | 逻辑非(简称“非”) | not a | 只需要 1 个操作数 a,如果 a 的值为 True,则返回False;反之,如果 a 的值为False,则返回True。 |
下面代码示范了与、或、非这三个逻辑运算符的使用:
# 直接对False求非运算,将返回True
print(not False)
# 5>3返回True,20.0大于10,因此结果返回True
print(5 > 3 and 20.0 > 10)
# 4>=5返回False,"c">"a"返回True。求或后返回True
print(4 >= 5 or "c" > "a")