目录
运算符是一种特殊的符号,用来表示数据的运算、赋值和比较等。Python 语言使用运算符将一个或多个操作数连接成可执行语句,用来实现特定功能。
Python 语言中的运算符可分为如下几种。
- 赋值运算符
- 算术运算符
- 位运算符
- 索引运算符
- 比较运算符
- 逻辑运算符
1. 赋值运算符
赋值运算符用于为变量或常量指定值, Python 使用“ =”作为赋值运算符。通常,使用赋值运算符将表达式的值赋给另一个变量。
# 为变量st赋值为Python
st = "Python"
# 为变量pi赋值为3.14
pi = 3.14
# 为变量visited赋值为True
visited = True
print(st)
print(pi)
print(visited)
# 将变量st的值赋给st2
st2 = st
print(st2)
a = b = c = 20
print(a)
print(b)
print(c)
d1 = 12.34
# 将表达式的值赋给d2
d2 = d1 + 5
# 输出d2的值
print("d2的值为:%g" % d2 ) # 17.34
2. 算术运算符
python 支持所有的基本算术运算符,这些算术运算符用于执行基本的数学运算, 如加、减、乘、除和求余等。
+ :加法运算符: “+”还可以作为字符串的连接运算符。
一:减法运算符: 除可以作为减法运算利之外,还可以作为求负的运算符
*:乘法运算符: 还可以作为字符串(序列) 的连接运算符, 表示将N 个字符串连接起来
/或// : 除法运算符。Python 的除法运算符有两个:“/”表示普通除法,使用它除出来的结果与平常数学计算的结果是相同的(即除不尽时,会产生小数部分);而“//”表示整除,使用它除出来的结果只有整数部分,小数部分将会被舍弃。
Python不允许使用0作为除数,否则将会引发Zero DivisionError 错误。
%:求余运算符。Python 不要求求余运算符的两个操作数都是整数, Python 的求余运算符完全支持对浮点数求余。求余运算的结果不一定总是整数,它是使用第一个操作数来除以第二个操作数,得到一个整除的结果后剩下的值就是余数。
由于求余运算也需要进行除法运算,因此求余运算的第二个操作数不能是0 , 否则程序会报出Zero DivisionError 错误。
**:乘方运算符。Python 支持使用“ ** ‘’作为乘方运算符, 这是一个使用非常方便的运算符。
由于开方其实是乘方的逆运算,因此实际上使用“**”也可进行开方运算。
C 与 Pyhon 语言
在数学公式中,两种语言的表示算法都是一样的,都是:
r = a - n*[a/n]
以上,r是余数,a是被除数,n是除数。
唯一不同点,就是商向0或负无穷方向取整的选择,c从c99开始规定向0取整,python则规定向负无穷取整,选择而已
C 语言 : (a%n的符号与a相同)
Python语言: (a%n的符号与n相同)
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) # 导致错误
print("5的2次方”, 5 ** 2) # 25
prit(" 27的开3次方", 27 ** (1 / 3)) # 3.0
3. 位运算符
使用位运算符可以直接操作数值的原始bit 位, 尤其是在使用自定义的协议进行通信时,使用位运算符对原始数据进行编码和解码也非常有效。
Python 支持的位运算符有如下6 个。
- & : 按位与。
- | : 按位或。
- ^ : 按位异或。
- ~ :按位取反。
- << :左位移运算符。
- >> : 右位移运算符。
计算机底层以补码的形式保存所有的整数。补码的计算规则是:正数的补码和原码完全相同,负数的补码是其反码加1; 反码是对原码按位取反,只是最高位(符号位)保持不变。
Python 的右移运算符为: >>。对于“>>”运算符而言,把第一个操作数的二进制码右移指定位数后,左边空出来的位以原来的符号位来填充。即:如果第一个操作数原来是正数,则左边补0;如果第一个操作数是负数,则左边补0.
# 将输出1
print(5 & 9)
# 将输出13
print(5 | 9)
a = -5
# 将输出4
print( ~a)
# 将输出12
print(5 ^ 9)
# 输出20
print(5 << 2)
# 输出-20
print(-5 << 2)
b = -5
# 输出-2
print(b >> 2)
4. 索引运算符
索引运算符就是方括号,在方括号中既可使用单个索引值,也可使用索引范围。实际上,在使用索引范围时,还可指定步长。
5. 比较运算符与bool类型
Python 提供了bool 类型来表示真(对)或假(错)。真(对) , Python 使用True 来代表:假(错),Python 使用False 来代表。
Python 支持的比较运算符如下:
- >:大于,如果运算符前面的值大于后面的值,则返回True ;否则返回Fal se 。
- >=: 大于或等于,如果运算柯:前面的值大于或等于后面的值,则返回True :否则返回False 。
- <:小于,如果运算符前面的值小于后面的值,则返回True ;否则返回False 。
- <=: 小于或等于, 如果运算符前面的值小于或等于后面的值,则返回True ;否则返回False 。
- ==: 等于,如果运算符前面的值等于后面的值,则返回True ;否则返回Fa lse 。
- !=:不等于, 如果运算符前面的值不等于后面的值,则返回True ;否则返回False 。
- is: 判断两个变量所引用的对象是否相同,如果相同则返回True 。
- is not : 判断两个变量所引用的对象是否不相同,如果不相同则返回True 。
Python 的两个booI 值分别是True 和False , 但实际上True 也可被当成整数1 使用, Fal se 也可被当成整数0 使用。也就是说, True 、False 两个值完全可以参与各种算术运算。
关于 == 与 is 看上去很相似,但实质上有区别, == 只比较两个变量的值,但is 要求两个变量引用同一个对象。
# 输出True
print("5是否大于 4:", 5 > 4)
# 输出False
print("3的4次方是否大于等于90.0:", 3 ** 4 >= 90)
# 输出True
print("20是否大于等于20.0:", 20 >= 20.0)
# 输出True
print("5和5.0是否相等:", 5 == 5.0)
# 输出False
print("True和False是否相等:", True == False)
# 输出True
print("1和True是否相等:", 1 == True)
# 输出True
print("0和False是否相等:", 0 == False)
print(True + False) # 输出1
print(False - True) # 输出-1
实际上, Python 提供了一个全局的 id() 函数来判断变量所引用的对象的内存地址。
import time
# 获取当前时间
a = time.gmtime()
b = time.gmtime()
print(a == b) # a和b两个时间相等,输出Ture
print(a is b) # a和b不是同一个对象,输出 False
print(id(a))
print(id(b))
6. 逻辑运算符
逻辑运算符用于操作bool 类型的变量、常量或表达式,逻辑运算的返回值也是bool值。
Python 的逻辑运算符有如下三个。
- and : 与,前后两个操作数必须都是True 才返回True ; 否则返回False ,
- or:或,只要两个操作数中有一个是True ,就可以运回True ;否则返回False,
- not :非, 只需要一个操作数,如果操作数为True ,则返回False ; 如果操作数为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")
对于组合逻辑来说,使用圆括号保证运算顺序非常重要
7. 三目运算符
Python 可通过if 语句来实现三目运算符的功能,因此可以近似地把这种if 语句当成三目运算符。
作为三目运算符的if吾句的语法格式如下:
True statements if expressio else False statements
三目运算符的规则是:先对逻辑表达式expression 求值,如果逻辑表达式返回True ,则执行并返回True statements 的值;如果逻辑表达式返回False , 则执行并返回False statements 的值。
a = 5
b = 3
st = "a大于b" if a > b else "a不大于b"
# 输出"a大于b"
print(st)
# 输出"a大于b"
print("a大于b") if a > b else print("a不大于b")
# 第一个返回值部分使用两条语句,逗号隔开
st = print("crazyit"), 'a大于b' if a > b else "a不大于b"
print(st)
# 第一个返回值部分使用两条语句,分号隔开
st = print("crazyit"); x = 20 if a > b else "a不大于b"
print(st)
print(x)
c = 5
d = 5
# 下面将输出c等于d
print("c大于d") if c > d else (print("c小于d") if c < d else print("c等于d"))
Python 允许在三目运算符的True statements 或False_statements 中放置多条语句。Python 主要支持两种放置方式。
- 多条语句以英文逗号隔开: 每条语句都会执行, 程序返回多条语句的返回值组成的元组。
- 多条语句以英文分号隔开:每条语句句都会执行,程序只返回第一条语句的返回值。
需要指出的是, 三目运算符支持嵌套,通过嵌套三目运算符, 可以执行更复杂的判断。
8. in 运算符
Python 提供了in 运算符,用于判断某个成员是否位于序列中,比如前面介绍的str 就是一个序列,因此程序可使用in 运算符判断字符串是否包含特定子串。
除in 运算符之外, Python 也提供了in 的反义词: not in 。
s = 'crazyit.org'
print('it' in s) # True
print('it' not in s) # False
print('fkit' in s) # False
print('fkit' not in s) # True
9. 运算符的结合性和优先级
所有的数学运算都是从左向右进行的, Python 语言中的大部分运算符也是从左向右结合的,只有单目运算符、赋值运算符和三目运算符例外,它们是从右向左结合的,也就是说,它们是从右向左运算的。
运算符有不同的优先级,所谓优先级就是在表达式运算中的运算顺序。
不要过多地依赖运算符的优先级来控制表达式的执行顺序,这样可读性太差,应尽量使用“()”来控制表达式的执行顺序。