Python基础之运算符

100 阅读5分钟

Python基础

3. Python的运算符

  1. 算术运算符:
    • +:加法
    • -:减法
    • *:乘法
    • /:除法(结果为浮点数)
    • //:整除(结果为整数)
    • %:取模(取余数)
    • **:幂运算
  2. 比较运算符:
    • ==:等于
    • !=:不等于
    • <:小于
    • >:大于
    • <=:小于等于
    • >=:大于等于
  3. 逻辑运算符:
    • and:与运算
    • or:或运算
    • not:非运算
  4. 赋值运算符:
    • =:赋值
    • +=:加法赋值
    • -=:减法赋值
    • *=:乘法赋值
    • /=:除法赋值
    • //=:整除赋值
    • %=:取模赋值
    • **=:幂运算赋值
  5. 位运算符:
    • &:按位与
    • |:按位或
    • ^:按位异或
    • ~:按位取反
    • <<:左移
    • >>:右移
  6. 成员运算符:
    • in:存在于
    • not in:不存在于
  7. 身份运算符:
    • is:判断两个对象是否引用同一个对象
    • is not:判断两个对象是否引用不同的对象
  8. 其他运算符:
    • ():括号,用于改变运算的优先级
    • ,:逗号,用于分隔多个表达式

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 中,布尔类型的值 TrueFalse 是唯一的,它们分别是单例对象(singleton objects)。这意味着在 Python 中,只有一个 True 对象和一个 False 对象存在于内存中,并且这些对象在程序运行期间不会改变 。

由于布尔类型的值是单例对象,所以对于 TrueFalse,使用 is 运算符进行身份比较是有效的

这下你应该明白了。

3.2.2 bool类型底层是 0 和 1在使用is和== 的问题

  1. 使用 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是不一样的。

  2. 使用 == 时:

    我们将 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 表示为 1False 表示为 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

  1. 使用range的注意事项。

    我们可以看出来,我们上面的例子,分别不省略, 省略一个参数, 省略连个参数。省略两个 range(20) 中的20 解释器只能识别为 终止位置。

    省略一个range(2,5) 解释器只能识别为 起始位置和 终止位置。所以说你想只省略 开始位置或者只省略 终止位置是不行的。当我们阅读代码的时候,我们一定记住,一个数是终止位置,两个数是开始位置和终止位置

3.4 python的可变数据类型和不可变数据类型

不可变数据(3 个):Number(数字)、String(字符串)、Tuple(元组); 可变数据(3 个):List(列表)、Dictionary(字典)、Set(集合)。