python之符号
python中的符号大致可以分为基本运算符、常用赋值符、逻辑运算符、成员运算符和身份运算符五大类,这五大类符号各自有着不同的作用
基本运算符
- 数学运算符
数学运算符的简化写法
n = 10
n += 1 # n = n + 1
n -= 1 # n = n - 1
n *= 1 # n = n * 1
n /= 1 # n = n / 1
n %= 1 # n = n % 1
n //= 1 # n = n // 1
n **= 1 # n = n ** 1
- 比较运算符
常用赋值符
除了以上简单的数学运算符外python还有多种赋值符号
- 链式赋值:将多个变量名绑定到同一个数据值
name = name1 = name2 = '李帆'
- 交叉复制
当我们想要交换两个变量名所绑定的数据值时,有两种可以采取的方法
- 添加中间量:
graph LR A(变量名A)-->A1(数据值A) A-->B1 B(变量名B)-->B1(数据值B) B-->A1
当我们直接交换时,原有的绑定关系没有解除,就会发生以下情况
m = 100
n = 999
m = n
n = m
print(m, n) # 999 999
当我们添加中间量后
变量m-->中间变量N:(1.m=N)
变量m-->变量n:(2.m=n)
变量n->中间变量N:(3.n=N)
当有了中间变量后
N = m
m = n
n = N
print(m, n) # 999 100
- 交叉赋值语法
m, n = n, m
print(m, n) # 999 100
- 解压赋值
解压赋值语法主要用于列表数据的提取,除了最基本的索引取值重复操作外,解压赋值更为快捷简便
name_list = ['张三', '李四', '王五', '赵六'] # 列表
name1, name2, name3, name4 = name_list # 解压赋值
解压赋值使用时需要左边变量名数量与右边数据数量一致
但是当解压赋值解压数量很大但是我们只需要用其中一部分时可以打破以上规则
a, *b = name_list
print(a) # 张三
print(b) # ['李四', '王五', '赵六']
a, c, *b = name_list
print(a)张三
print(c)赵六
print(b) # ['李四', '王五']
a, *b, c = name_list
print(a) # 张三
print(b) # ['李四', '王五']
print(c) # 赵六
使用以上代码我们可以按照所需要的顺序提取所需数据,且剩余数据会自动组织成列表赋值给*后面的变量名,如果多余出来的数据值没有使用的打算,还可以用下划线代替变量名
a, *_, c = name_list
逻辑运算符
python中的逻辑运算符共有三个
- and:
表达式:x and y,即布尔的“与”,如果 x 或 y 任意一个值为 False,则返回为False的值,否则返回 y 的值
- or:
表达式:x or y,即布尔的“或”,如果 x 或 y 任意一个值为 True,则返回为True的值,否则返回 x 的值
- not:
not:表达式:not x,即布尔的“非”,如果 x 值为 True,则返回为False,否则返回True
成员运算符
主要用于判断个体是否在群体中
- in:
判断指定对象是否在序列中找到,是返回True,否返回False
- not in:
与in相反,判断指定对象是否不在序列中找到,是返回True,否返回False。
身份运算符
is或is not 与 = = 或 ! = 类似,区别在于:is或is not判断的是指定对象id地址是否相等,而= = 或 ! =判断的是指定对象的值是否相等
is:
判断指定对象是否引用自同一对象,即是否具有相同的id地址,是返回True,否返回False。
is not:
与is相反,判断指定对象是否引用自不同的对象,即是否具有不同的id地址,是返回True,否返回False
PS:根据不同环境下对python语法优化的程度不同,我们需要注意,当值相同时,其内存地址可能不同,内存地址相同时,值肯定相同