Python基础
3. Python的运算符
- 算术运算符:
+:加法-:减法*:乘法/:除法(结果为浮点数)//:整除(结果为整数)%:取模(取余数)**:幂运算
- 比较运算符:
==:等于!=:不等于<:小于>:大于<=:小于等于>=:大于等于
- 逻辑运算符:
and:与运算or:或运算not:非运算
- 赋值运算符:
=:赋值+=:加法赋值-=:减法赋值*=:乘法赋值/=:除法赋值//=:整除赋值%=:取模赋值**=:幂运算赋值
- 位运算符:
&:按位与|:按位或^:按位异或~:按位取反<<:左移>>:右移
- 成员运算符:
in:存在于not in:不存在于
- 身份运算符:
is:判断两个对象是否引用同一个对象is not:判断两个对象是否引用不同的对象
- 其他运算符:
():括号,用于改变运算的优先级,:逗号,用于分隔多个表达式
3.1 身份运算符的使用
在使用 is和 is not的时候,实际是比较两个对象的内存地址是否相同,我们要记住,这里比较的必须是对象,不能是基本数据类型。如果是基本数据类型就会报错。
3.2 is和 == 的区别
is 是比较两个对象的内存地址是否相同
== 是比较 两个对象的值是否相等,也可以比较基本数据类型,但是我们在python的 所有变量都是 对象,所以如果两边都是 基本数据类型比如 1 ==1 这样就是去了意义。
3.2.1 is在 bool 类型使用注意
我们在前面知道 is 只能比较的是两边都是对象,但是我们在python代码中经常能看到这样的代码:
x = True
if x is True:
print("x is True")
我们会发现后面说 有一个True,按上面的结论来说 True应该是一个对象,但是我们知道bool类型是基本数据类型,那这样不就相互不符合逻辑了吗,接下来看看这是怎么回事?
在 Python 中,布尔类型的值 True 和 False 是唯一的,它们分别是单例对象(singleton objects)。这意味着在 Python 中,只有一个 True 对象和一个 False 对象存在于内存中,并且这些对象在程序运行期间不会改变 。
由于布尔类型的值是单例对象,所以对于 True 和 False,使用 is 运算符进行身份比较是有效的
这下你应该明白了。
3.2.2 bool类型底层是 0 和 1在使用is和== 的问题
-
使用 is时
因为is只能比较对象,我们让 True和 a=1 进行比较
a = 1 if a is True: print("a =1 is True") else: print("a=1 is not True")结果是:a=1 is not True
很显然我们使用 is 做 布尔类型判断的时候不会出现问题,我们1 的地址和True是不一样的。
-
使用 == 时:
我们将 a与 True进行比较
a =1 if 1 == True: print("1 == True") else: print("1 == True")输出结果: 1 == True ,将1换为a ,当a =1 时,因为 == 是比较对象的值,所以实质还是比较 1 == True, , 但是为什么相等呢?
1是整数类型,而True是布尔类型。当进行1 == True的比较时,Python 会进行隐式的类型转换。Python 中的布尔类型
True在数值上等价于整数值1,而布尔类型False在数值上等价于整数值0。这是因为 Python 将布尔类型作为整数的子类处理,其中True表示为1,False表示为0。因此,当进行
1 == True的比较时,Python 会将True转换为整数1,然后进行数值的比较。由于1等于1,所以比较结果为True看到这里 我们应该知道,我们在使用 布尔类型判断进行判断的时候,建议不使用== 来进行判断,使用is 类型 因为这样可能会 引入1 和 0 的判断错误
3.3 成员运算符 in not in
Python的in和not in运算符允许你快速确定给定值是否是集合的一部分。这种类型的检查在编程中很常见,在Python中通常称为成员测试。因此,这些运算符被称为成员运算符。你需要检查给定值是否是集合的成员,这种检查通常称为成员资格测试。
a = "lisi"
print("l" in a)
a = [3,5,7,8]
print(3 in a)
step:步长(默认为 1),表示生成的整数序列中相邻元素之间的间隔。
range() 函数返回一个可迭代对象,通常与 for 循环结合使用。
-
省略写法1 :
省略起始位置和步长,起始位置默认:0, 步长默认:1
for i in range(5): print(i) //输出结果: 0 1 2 3 4 -
省略写法2:
只省略步长,
for j in range(3, 10): print(j)我们会打印:3, 4,5,6,7,8,9
-
使用range的注意事项。
我们可以看出来,我们上面的例子,分别不省略, 省略一个参数, 省略连个参数。省略两个 range(20) 中的20 解释器只能识别为 终止位置。
省略一个range(2,5) 解释器只能识别为 起始位置和 终止位置。所以说你想只省略 开始位置或者只省略 终止位置是不行的。当我们阅读代码的时候,我们一定记住,一个数是终止位置,两个数是开始位置和终止位置。
3.4 python的可变数据类型和不可变数据类型
不可变数据(3 个):Number(数字)、String(字符串)、Tuple(元组); 可变数据(3 个):List(列表)、Dictionary(字典)、Set(集合)。