python中is函数用法_Python 的 “==” 和 “is”区别用法介绍

Python中比较两个对象是否相等,一共有两种方法,简单来说,它们的区别如下:

is 是比较两个引用是否指向了同一个对象(引用比较)。

== 是比较两个对象是否相等。

>>> a = [1, 2, 3]

>>> b = a

>>> b is a # a的引用复制给b,他们在内存中其实是指向了用一个对象

True

>>> b == a # 当然,他们的值也是相等的

True

>>> b = a[:] # b通过a切片获得a的部分,这里的切片操作重新分配了对象,

>>> b is a # 所以指向的不是同一个对象了

False

>>> b == a # 但他们的值还是相等的

True

实现原理

is 比较的是两者是否是同一个对象,所以比较的是内存地址(id是否相同)。

== 是值比较。不可变对象,例如int,str,它会直接进行值比较。对于Python已知的对象,会调用他们的 __eq__ 函数来比较。(其实已知的对象应该也是通过内置的 __eq__ 函数来比较的)。对于自定义的对象,如果实现了 __eq__ 函数,就会使用它比较,如果没有实现,效果和 == 是一样的。

对象缓存机制

Python会对比较小的对象缓存,下次用到比较小的对象时,会去缓存区查找,如果找到,不会再开辟新的内存,而是继续把小对象的地址赋给新的值。例子:

>>> c = 1

>>> d = 1

>>> print(c is d)

True

>>> 1000 is 10**3

False

>>> 1000 == 10**3

True

通过计算得到的赋值,不会使用缓存区。从第一个代码示例中可以看出。

对于字符串,你可以通过使用 intern 函数强制使用缓存区。

`if __name__ == "__main__":` 是 Python 中常用的一个条件语句,它通常用于判断当前模块是否是运行在主程序中,或者是被其他模块 import 而导入运行的。 具体来说,当一个 Python 文件直接被执行时,`__name__` 变量的值会被自动设置为 `"__main__"`,如果被导入时,`__name__` 的值就是模块名(即文件名)。 因此,使用 `if __name__ == "__main__":` 可以方便地将一些只在作为主程序运行时才执行的代码放在这个条件语句中,而避免在模块被导入时执行这些代码。 下面是一个简单的示例,假设我们有一个名为 `example.py` 的 Python 模块,里面包含一些函数变量: ``` # example.py def add(x, y): return x + y def sub(x, y): return x - y pi = 3.1415926 ``` 如果我们在命令行中直接执行 `example.py`,那么 `__name__` 的值就是 `"__main__"`,我们可以在条件语句中添加一些测试代码: ``` # example.py def add(x, y): return x + y def sub(x, y): return x - y pi = 3.1415926 if __name__ == "__main__": print("This is the main program.") print("The result of 1 + 2 is", add(1, 2)) print("The value of pi is", pi) ``` 如果我们将 `example.py` 导入到另一个模块中,那么 `__name__` 的值就是模块名(即文件名),条件语句中的代码就不会被执行: ``` # test.py import example print("This is a test program.") print("The result of 3 - 4 is", example.sub(3, 4)) ``` 这样,当我们执行 `test.py` 时,`example.py` 中的测试代码就不会被执行,只有 `test.py` 的代码会被执行。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值