自学Python第三天-运算符


python 的运算符分为 算术运算符、比较运算符、赋值运算符、逻辑运算符、位运算符、成员运算符、身份运算符、三目运算符

算术运算符

算术运算符符合四则混合运算的计算规则

运算符描述示例备注
+a + b
-a - b
*a * b
/20 / 4返回值是浮点数 5.0
%取模,返回除法商的余数10 % 3返回值 1
**幂次3 ** 4返回值 81
//返回商的整数部分10 // 3返回值 3

由于计算机会将小数部分转换成二进制进行计算,且因为二进制的有穷性,所以小数运算会有误差,例如

>>> 1.1 -1
0.10000000000000009
>>> 5.4-3
2.4000000000000004
>>> round(1.15,1)	# 四舍五入保留1位小数
1.1
>>> round(0.5)  # 四舍五入到整数位
0

需要精确计算可以使用 decimal 这个模块。

>>> from decimal import Decimal # 从 decimal 模块中引入 Decimal 类
>>> 0.1-0.09
0.010000000000000009
>>> Decimal('0.1')-Decimal('0.09')
Decimal('0.01')

具体的可以看 老Amy的 这篇文章

Python中浮点数运算不正确问题

另需注意的是

  • 整除是向下取整的。
>>> 10//3
3
>>> -10//3
-4		# 不取整是 -3.3333 向下则是 -4
  • 取模,也就是取余数,是使用整除来进行运算的,所以在负值的取模上也需要注意。
>>> 10 % 3
1		# 10//3=3   3*3=9  10-9=1
>>> -10 % 3
2		# -10//3=-4  -4*3=-12  10--12=2

比较运算符

比较运算符通常用于比较两个值

运算符描述示例
==比较两个值是否相等a == b
!=比较两个值是否不等a != b
>大于a > b
<小于a < b
>=大于等于a >= b
<=小于等于a <= b

需要注意的有:

  • 因为是值比较,所以可以跨类型比较,例如使用 1 == True 或 2.0 == 2 ,返回值是 True。
  • 因为 python 大小写敏感,所以 1 == true 返回值就是 False 了。
  • 字符串不能直接与数值比较,但是可以使用 == 和 != 进行比较。
  • 字符串和字符串比较时,使用 ASCII 码的值依次比较。
  • python2 中可以使用 <> 作为不等于,而 python3 废除了。
  • 可以进行连续比较,例如 3 > 2 > 1 相当于 3 > 2 and 2 > 1
  • 使用 () 则优先计算 () 中的内容。例如 (3 > 2) > 1 ,其实是 True > 1

赋值运算符

python 有以下赋值运算符

运算符描述说明
=赋值将 = 右侧的值赋值给左侧
+=加法赋值c += a 等效 c = c + a
-=减法赋值c -= a 等效 c = c - a
*=乘法赋值c *= a 等效 c = c * a
/=除法赋值c /= a 等效 c = c / a
%=取余数赋值c %= a 等效 c = c % a
**=幂次赋值c **= a 等效 c = c ** a
//=取整除赋值c //= a 等效 c = c // a

需要注意的是,python 不支持 a++ 或 a-- 这种自增、自减的赋值运算。

另外 3.8 版本引入了赋值表达式运算符 := ,也成为 walrus operator(海象运算符),它允许在条件、循环和其他表达式中同时进行赋值和测试。例如:

while (value := input('输入')):		# 同时进行了赋值和判断
	print(value)

逻辑运算符

python 支持最基本的逻辑运算符

运算符表达式描述
anda and b逻辑与
ora or b逻辑或
notnot a逻辑非

逻辑运算符比较简单,和其他语言的使用逻辑是一样的。唯一要注意的是,python 的逻辑运算是基于短路(懒惰)机制,这种机制就像是 and 和 andalso 、or 和 orelse 的差别一样。

如果第一个值的判断结果产生,进而就能影响整个逻辑运算时,就不判断第二个值了。举例:a and b ,a 和 b 均为 True则返回 True ,如果其中有一个是 False 则返回 False 。

这样光判断 a 的值就能够知道整个逻辑运算的结果了:如果 a 是 False ,则无论 b 的值如何,返回结果都是 a (即 False) ;如果 a 是 True ,则返回结果就是 b (即 b 为 True 就返回 True ,b 为 False 就返回 False)。

or 的运算也类似于 and :如果第一个值为 True ,则返回第一个值 ;如果第一个值为 False ,则返回第二个值。

基于这种机制,在 python 可以进行这种逻辑运算:

>>> 10 and '20'
'20'
>>> '10' or 20
'10'
>>> '' and True
''

因为非 0 非空的值均为 True 这一原则,所以逻辑运算可以在不同的类型之间进行,返回的结果也是第一个值或第二个值,而不仅仅是 True 和 False 。需要注意的是,也是因为这个原则,如果期望返回 0 或 False,则不被达成。

再次强调,python 大小写敏感, True 是 bool 型的关键字,而 true 则是自定义的变量名。

位运算符

位运算符的含义就是将值按照二进制方式进行比较,返回比较结果

运算符描述
&按位与:两者都为1则1,否则0
|按位或:有一个为1则1,否则0
^按位异或:两者相同则0,否则1
~按位取反:单个值的0变1,1变0

举例:
60 的二进制为 0011 1100
13 的二进制为 0000 1101

>>> a, b=60, 13
>>> a & b
12
>>> a | b
61
>>> a ^ b
49
>>> ~a
195

计算原理:
& 按照二进制位进行比较,两个都为1则1,否则0

运算符二进制值十进制值
0011 110060
&0000 110113
=0000 110012

| 按照二进制位进行比较,有一个为1则1,否则0

运算符二进制值十进制值
0011 110060
|0000 110113
=0011 110161

^ 按照二进制位进行比较,两者相同则0,否则1

运算符二进制值十进制值
0011 110060
^0000 110113
=0011 000149
运算符二进制值十进制值
0011 110060
~11000011195

成员运算符

成员运算符 in 和 not in 是 python 独有的运算符,用于判断对象是否是某个集合的元素之一,非常好用且运行速度非常快。返回结果为布尔值。

身份运算符

身份运算符 is 和 is not 也是 python 独有的运算符,用于判断两个对象的内存地址是否一致。返回结果为布尔值。

对于 is 与 == 是由区别的, is 判断两个变量引用的内存地址是否一致,而 == 判断两个变量的值是否相等。例:

>>> a, b = [1, 2, 3], [1, 2, 3]
>>> a == b
True
>>> a is b
False

可以使用 id() 函数查看变量或对象的内存地址。能够真切的发现 a 和 b 的内容地址是不同的。

另一个例子

>>> a, b = 10, 10
>>> a is b
True

这是因为 a 和 b 两个变量指向的对象(10)是一致的,所以内存地址是一致的。

三目运算符

三目运算符就是三元运算符,只是在 python 中使用的语法不同: True_statements if expression else False_statements真声明 if 表达式 else 假声明 。例:

# 如果 a + b > 2 则返回 a + b ,否则返回 b - a
>>> a, b = 1, 2
>>> a + b if a + b > 2 else b - a
3

相当于

a, b = 1, 2
if a + b > 2:
	print(a + b)
else:
	print(b - a)

运算符的优先级

下表从高到低的列出了运算符的优先级。优先级高的运算符优先计算或处理,同级别的按照从左往右的顺序计算(赋值运算符除外,按照从右往左的顺序)。

运算符描述
()括号
**指数、幂次
~按位取反
+ -正、负
* / % //乘 除 取模 取除整
+ -加 减
&按位与
^ |按位异或 按位或
<= < > >=小于等于 小于 大于等于 大于
== !=等于 不等于
= %= /= //= -= += *= **=赋值运算符
is is not身份运算符
in not in成员运算符
and or not逻辑运算符
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值