菜鸟教程《Python 3 教程》笔记(3):运算符

笔记带有个人侧重点,不追求面面俱到。

3 Python 3 运算符

出处:菜鸟教程 - Python3 运算符

Python 语言支持以下类型的运算符:

  • 算术运算符
  • 比较(关系)运算符
  • 赋值运算符
  • 逻辑运算符
  • 位运算符
  • 成员运算符
  • 身份运算符

3.1 赋值运算符

Python 3.8 新增了,海象运算符 := ,可在表达式内部为变量赋值,目的是避免重复调用,提高运行时间

示例:

if (n := len(a)) > 10:
    print(f"List is too long ({n} elements, expected <= 10)")

上述代码,避免2次调用 len(),也省去使用中间变量。

扩展阅读:
Python :=海象运算符最简单的解释
What’s New In Python 3.8

3.2 位运算符

#!/usr/bin/python3
 
a = 60            # 60 = 0011 1100 
b = 13            # 13 = 0000 1101 
c = 0
# 按位与运算符
c = a & b        # 12 = 0000 1100
print ("1 - c 的值为:", c)
# 按位或运算符
c = a | b        # 61 = 0011 1101 
print ("2 - c 的值为:", c)
# 按位异或运算符
c = a ^ b        # 49 = 0011 0001
print ("3 - c 的值为:", c)
# 按位取反运算符
c = ~a           # -61 = 1100 0011
print ("4 - c 的值为:", c)
# 左移动运算符
c = a << 2       # 240 = 1111 0000
print ("5 - c 的值为:", c)
# 右移动运算符
c = a >> 2       # 15 = 0000 1111
print ("6 - c 的值为:", c)

3.3 逻辑运算符

运算符逻辑表达式描述
andx and y布尔"与" - 如果 x 为 False,x and y 返回 x 的值,否则返回 y 的计算值。
orx or y布尔"或" - 如果 x 是 True,它返回 x 的值,否则它返回 y 的计算值。
notnot x布尔"非" - 如果 x 为 True,返回 False 。如果 x 为 False,它返回 True。

实例:

print(10 and 20)  # 20
print(0 and 20)   # 0
print(10 or 20)   # 10
print(0 or 20)    # 20
print(0 or True)  # True
print(not 0)      # True
print(not True)   # False

3.4 身份运算符

is== 的区别:is 用于判断两个变量引用对象是否为同一个, == 用于判断引用变量的值(子对象)是否相等。

补充: is 判断两个对象是否为同一对象,是通过 id 来判断的;当两个基本类型数据(或元组)内容相同时,id 会相同,但并不代表 a 会随 b 的改变而改变。
== 判断两个对象的内容是否相同,是通过调用 __eq__() 来判断的。

实例:

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

上述代码,b = aba 的引用,指向同一个内存地址;b = a[:]ba 的浅拷贝,共用相同的子对象。可以参考:Python中直接赋值、浅拷贝和深拷贝的区别

补充内容:

a = 100
b = 100
print(a is b)  # True
print(a == b)  # True

上述代码中,ab 指向了同一个内存地址。这是 Python 的特性,变量以内容为基准。这个特性决定了在 Python 中,数字类型的值是不可变的。当 a 的值改变时,是 a 指向了新的内存地址,而不是内存地址中的值改变了。

3.5 运算符优先级

以下表格列出了从最高到最低优先级的所有运算符, 相同单元格内的运算符具有相同优先级。 运算符均指二元运算,除非特别指出。 相同单元格内的运算符从左至右分组(除了幂运算是从右至左分组):

运算符描述
(expressions…), [expressions…], {key: value…}, {expressions…}圆括号的表达式
x[index], x[index: index], x(arguments…), x.attribute读取,切片,调用,属性引用
await xawait 表达式
**乘方(指数)
+x, -x, ~x正,负,按位非 NOT
*, @, /, //, %乘,矩阵乘,除,整除,取余
+, -加和减
<<, >>移位
&按位与 AND
^按位异或 XOR
|按位或 OR
in,not in, is,is not, <, <=, >, >=, !=, ==比较运算,包括成员检测和标识号检测
not x逻辑非 NOT
and逻辑与 AND
or逻辑或 OR
if – else条件表达式
lambdalambda 表达式
:=赋值表达式

注意: and 的优先级比 or 高。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

猎猫骑巨兽

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值