python基本运算以及各运算符
基本运算符
1.算术运算符
= 赋值运算符
+ 加法运算符
Y = Y + 3 也可写成 Y += 3
- 减法运算符
Y = Y - 3 也可写成 Y -= 3
* 乘法运算符
Y = Y * 3 也可写成 Y *= 3
/ 除法运算符
Y = Y / 3 也可写成 Y /= 3
% 取模运算符
Y = Y % 3 也可写成 Y %= 3
** 幂运算符
Y = Y ** 3 也可写成 Y **= 3
// 取整运算符
Y = Y // 3 也可写成 Y //= 3
2.比较运算符
== 等于
!= 不等于
> 大于
< 小于
>= 大于或等于
<= 小于或等于
3.赋值运算符
有交叉赋值、链式赋值、减压赋值
4.链式赋值
x = y = z = 10
5.交叉赋值
m, n = n, m
print(m, n)
6.解压赋值
name_list = ['aa', 'bb', 'cc']
# 如果要求用三个不同的名字存储三个不同的人名,一般我们会首先想到利用索引找出名字然后分别绑定给三个变量名,例如:
name1 = name_list[0]
name2 = name_list[1]
name3 = name_list[2]
# 而为了方便介绍代码的书写,我们可以利用解压赋值
name1, name2, name3 = name_list
# 注意:正常操作需要保证左边的名字和右边的数据值,个数一致,并且赋值符号得左边必须有俩个包括俩个得名字,解压赋值才有效
a, b = name_list # 名字少了
a, b, c, d, e = name_list # 名字多了
# -特殊情况 带解压的数据非常的多
data = [1, 2, 3, 4, 5, 6, 7, 8, 9]
a, b, *c, d = data # *在解压赋值的时候会自动将多余的数据值组织成列表赋值给*号后面的变量名
print(a) # 1
print(b) # 2
print(c) # [3, 4, 5, 6, 7, 8]
print(d) # 9
*c, a, b = data
print(a) # 8
print(b) # 9
print(c) # [1, 2, 3, 4, 5, 6, 7]
逻辑运算符
1.and逻辑与
and连接的多个条件需要全部成立,只要有一个不成立,结果就不成立,因此后面的可以不需要再看,不论是一个and还是多个,只要出现一个不成立,结果都不成立。
print(1 == 1 and 2 > 10 and 3!=6 and True and 10 < 2) # False
print(1 == 1 and 2 < 10 and 3!=6 and True and 10 > 2) # True
补充:
print(1 == 2 and 3) # False
"""
print(1 == 2) # False
连接的条件 如果不是一个具体的值 则需要自动转换成布尔值
"""
print(10 > 3 and 100) # 100
"""
由于and前面的运算得出的布尔值是True 所以and连接的条件最终的结果取决于后面的
如果后面的值是明确的数据值 那么直接返回该数据值(数据值对应的布尔值必须是True)
"""
print(1 == 1 and 2 == 2) # True
print(1 == 1 and False) # False
print(True and 1 == 1) # True
print(1 and 10) # 10
2.or逻辑或
or连接的多个条件只要一个条件成立,结果就成立, 因此要一直看下去直到出现成立的结果,否则结果不成立
print(1 == 1 or 2 < 10 and 3==6 and True and 10 > 2) # True
print(1 == 2 or 2 > 10 or 3==3 and True and 10 < 2) # False
补充:
print(1 == 1 or 111) # True
print(1 or 10 > 20) # 1
print(10 or 100) # 10
and和or连接的多个条件在返回具体结果的时候可能是布尔值也可能是数据值
我们在日常写代码的时候不需要纠结具体返回的是什么 直接当成布尔值处理
3.not逻辑否
not连接的多个条件的结果是取反,原本结果是正确的那就是错误,原本是错误的那就过就是正确的
print(not 2 < 10 and 3==6 and True and 10 > 2) # False
注意:如果三者联合起来使用,需要加括号考虑优先级,否则编写方式是不合理的。
(3>4 and 4>3) or ((1==3 and 'x' == 'x') or 3 >3 # 合理的编写方式
成员运算符
1. in
如果左面的对象在右面的对象中,则返回True,否则返回False
2. not in
如果左面的对象不在右面的对象中,则返回True,否则返回False
3. 在列表、字符串、字典中的使用
3.1 列表
name_list = ['zhangran', 'jufengwei', 'toy', 'liyifeng']
print('dog' in name_list) # False
print('zhangran' in name_list) # True
print('zhang' in name_list) # False
print('zhangran jufengwei' in name_list) # False
在列表中最小的单位就是单个数据整体,不可再切割划分
3.2 字符串
data = 'ab cd efgh igk limno prs tuvwx yz'
print('d' in data) # True
在字符串中最小的单位就是单个字符,可查询单个字符也可查询多个字符
3.3 字典
data = {'name': 'zhangran', 'gender': 'women', 'look': 100, 'age': 23}
print('zhangran' in data) # False
print('name' in data) # True
在字典中只有‘k’值参加运算,‘v’值默认不展现给外界
身份运算符
1. is 判断数据值的内存是否一致 结果是 True或者False
2. is not 判断数据值的内存是否不一致 结果是 True或者False
3. == 判断数据值是否一直 结果是 True或者False
4. 查看内存地址会用到 id()
a = [1, 2, 3, 4, 5, 6]
b = [1, 2, 3, 4, 5, 6]
print(id(a)) # 2895993099072
print(id(b)) # 2895993093952
c = 123
d = 123
print(id(c)) # 140712966690272
print(id(d)) # 140712966690272
根据练习我们可以发现,值相等内存地址可能也会不同,但内存地址相等值肯定相等(单次内存中)
e = 10
f = 10
print(id(e)) # 140712966686656
print(id(f)) # 140712966686656
额外知识补充
python会因为数据小经常用会做数据优化处理,叫做小整数池
在一些IDE工具中也会做到数据优化,内存地址会一样