运算符、赋值符
基本运算符
1.数学运算符
+ - * / % // **
简化写法
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
2.比较运算符
< > <= >= ==(等于号) !=(不等于)
关于'//'向下取整的例子:
表达式 11 // 4 的计算结果是 2 ,而与之相反的是浮点数的真正除法返回 2.75 。
注意 (-11) // 4 会返回 ->因为这是 -2.75 向下 舍入得到的结果。
常用赋值符
1.链式赋值
name = 'jason'
name1 = name
name2 = name
name = name1 = name2 = 'jason' # 链式赋值
2.交叉赋值
m = 100
n = 999
'''让m和n互相转换绑定的值'''
"""奇葩式写法"""
# m = n
# n = m
# print(m, n) # 999 999
'''方式1:采用中间变量'''
# temp = m
# m = n
# n = temp
# print(m, n) # 999 100
'''方式2:交叉赋值语法'''
m, n = n, m
print(m, n) # 999 100
3.解压赋值
name_list = ['jason', 'kevin', 'tony', 'oscar']
'''low的写法'''
# name1 = name_list[0]
# name2 = name_list[1]
# name3 = name_list[2]
# name4 = name_list[3]
'''解压赋值语法'''
# name1, name2, name3, name4 = name_list
'''解压赋值在使用的时候 正常情况下需要保证左边的变量名与右边的数据值个数一致'''
# a, b = name_list # 变量名少了不行
# a, b, c, d, e = name_list # 变量名多了也不行
'''当需要解压的数据个数特别多 并且我们只需要使用其中的几个 那么可以打破上述的规则'''
# a, *b = name_list # *会自动接收多余的数据 组织成列表赋值给后面的变量名
# print(a) # jason
# print(b) # ['kevin', 'tony', 'oscar']
# a, c, *b = name_list
# print(a)
# print(c)
# print(b) # ['tony', 'oscar]
# a, *b, c = name_list
# print(a) # jason
# print(b) # ['kevin', 'tony']
# print(c) # oscar
'''当数据值不准备使用的时候 可以使用下划线作为变量名绑定 这也是约定俗成的'''
a, *_, c = name_list
print(_) # ['kevin', 'tony']
交叉赋值语法(重要)
'''多重赋值其实 只是元祖打包 和 序列解包的组合'''
m = 100
n = 999
m,n = n,m
先根据变量名n,m找到内存中对应的999,100
在内存中生成一个新元祖 (999,100)
解压赋值 m,n = (999,100)
逻辑运算符
举例:
'''主要配合条件一起使用'''
and 与
and连接的多个条件必须全部成立 结果才成立
eg:
你去相亲提要求:身高必须是160以上、长相必须好看、家里必须有钱、性格必须温柔
身高 and 长相 and 有钱 and 温柔
1 > 2 and 4 < 8 and 10 < 1 and 1 == 2 如果条件中全部由and组成那么判断起来非常的简单
只要发现一个不成立 结果就不成立
print(1 < 10 and 666) # 666 成立
print(1 < 10 and 2 < 8) # True 成立
print(111 and 222) # 222 成立
如果需要你准确的说出具体的结果值 那么需要按照下列方式
如果and左边的条件是成立的 那么就完全取决于右边的条件
右边如果直接是数据值 那么结果就是该数据值 如果是含有表达式 则为布尔值
or 或
or连接的多个条件只要有一个成立 结果就成立
eg:
你去相亲提要求:要么家里有钱 或者家里有势 或者长得完美 或者对你死心塌地
有钱 or 有势 or 好看 or 专一
1 > 2 or 4 < 8 or 10 < 1 or 1 == 2
如果条件中全部由or组成那么判断起来非常的简单 只要发现一个成立 结果就成立
# print(1 < 10 or 666) # True
# print(666 or 1 > 10) # 666
print(0 or False) # False
print(0 or 111) # 111
not 非
取反
类似于说反话
"""
三者混合使用的时候有优先级之分 但是我们不需要记忆优先级 应该通过代码的形式提前规定好优先级
eg: 先乘除有加减 但是可以使用括号来改变优先级
(3>4 and 4>3) or ((1==3 and 'x' == 'x') or 3 >3)
"""
成员运算符
判断个体在不在群体内
# name_list = ['jason', 'kevin', 'oscar', 'jerry']
# print('tony' in name_list) # False
# print('tony' not in name_list) # True
# print('j' in name_list) # False 列表最小单位是数据值 不能再细分
# s1 = 'hello world'
# print('d' in s1) # 字符串最小单位是单个单个的字符
d1 = {
'username': 'jason',
'pwd': 123
}
print('jason' in d1) # False 字典成员运算只有键参与
print('username' in d1) # True 'username' 'pwd'
身份运算符
"""
id() 返回一串数字 该数字可以看成是内存地址
"""
is 判断内存地址是否相同
== 判断数据值是否相同
# l1 = [11, 22, 33, 44, 55, 66, 77, 88]
# l2 = [11, 22, 33, 44, 55, 66, 77, 88]
# print(l1 == l2) # True
# print(id(l1))
# print(id(l2))
# print(l1 is l2) # False
# 小整数池
i1 = 11
i2 = 11
print(i1 is i2) # True
s1 = 'jason jason jason'
s2 = 'jason jason jason'
print(s1 is s2) # pycharm run窗口下:true # 终端下:false
不同的环境下可能优化的程度不一样
"""
了解
值相同 内存地址可能不同
内存地址相同 值肯定相同
"""
额外的例子:
身份运算符 is not # 身份运算符用于比较两个对象的存储单元
is not 是判断两个标识符是不是引用自不同对象
a = [1,2]
b = [1,2]
print(id(a))
print(id(b))
print(a is not b) # True
# 在内存中会产生两个列表对象 这两个的id值都不同 a与b id值不同 故返回true
在终端的情况下: