ipad上用python编程,python苹果手机编译器
介绍
你不知道Python里的“是”和“==”吧?它经常被用来比较变量和字面量。有什么区别?在什么情况下应该使用is?在什么情况下应该使用==呢?这成了很多人心中的一个谜题。
Is:通常用于确定变量是否为None。
一个
2
三
四
五
6a=无
a是无
真实的
b=1
b是无
骗子
另一方面,在判断一个变量是否为文字量时,比如是否为数值,我们通常用==:
一个
2
三
四
5a=0
a==0
真实的
a==1
骗子
要解决以上疑惑,我们首先需要了解什么是和==是。
什么是“是”和“==”
Is用于检查同一性,即两个变量是否指向同一个对象。
==用于检查两个变量的值是否相等。
身份也意味着价值观的平等。因为它们都指向同一个对象,所以值必须相等。但恰恰相反。
__eq__魔法方法
==用来检查值的等价性,那么如何比较两个对象的值呢?
关于比较基本类型对象的值的信息很容易理解。例如,比较列表对象[1,2,3]的值是比较列表的长度和列表中每个元素的值。
但是,对于自定义对象,如何比较值呢?__eq__(自己,其他)魔法的方法就介绍到这里了。对象的==逻辑可以这样实现。例如:
一个
2
三
四
五
六
七
八
九
10
11classfoo(对象) :def __eq__(自己,其他) :返回True。
foo=Foo())
foo==1
真实的
foo==无
真实的
foo是无
骗子
上面的例子定义了Foo类并实现了__eq__(self,other)方法。这总是返回True。这意味着任何对象===的值比较结果为True。另一方面,当进行身份比较时,例如与None进行比较,它返回False,因为它不是同一个对象。
风景示例
示例1:比较同一对象的变量1
2
三
四
五
6a=[ 1,2,3 ]
因为b=a # b指向A,A指向[1,2,3],B指向同一个[1,2,3]
b是a
真实的
b==a
真实的
在上面的例子中,A和B指向同一个list对象[1,2,3],所以如果对它们使用is和==的话,结果为真。
示例2:指向不同对象的变量的比较1
2
三
四
五
6a=[ 1,2,3 ]
B=a[:] # b复制a指向的列表,生成一个新的[1,2,3]
b是a
骗子
b==a
真实的
在上面的例子中,B指向A的副本,这意味着使用is的结果是False,因为A和B指向两个不同的对象。但是,因为值相等,所以使用==的结果为真。
例3:单词1的变体比较
2
三
四
五
六
七
八
九
10
11
12
13
14a=256
B=256 #和A指的是同一个字面量256
Isb #表示指向同一个对象。
真实的
a==b
真实的
g
t;
a=257
b=257
a==b
真实的
Isb #表示指向不同的对象。
错误的
一般来说,两个变量指向字面量,它们的比较应该用==而不是is,否则可能会出现类似上例的混淆。
在Python的交互式解释器中,可能经常使用的整数对象是在范围[-5,256]内指定的,它们在创建时会被缓存。但是,每当您需要再次使用它们时,您将从缓存中获取它们,而不是重新创建它们。
当a和b都指向同一个文本256时,A is b返回True。这是因为当声明b=256时,256整数对象是从缓存中取出而不是重新创建的,所以A和B指向同一个整数对象。
当a和b都指向同一个文字257时,a is b返回False。这是因为当声明b=257时,257整数对象没有缓存而是重新创建,所以A和B指向不同的整数对象。
同样,如果文字是字符串,结果也是类似的。
一个
2
三
四
五
六
七
八
九
10
11
12a=python.org
b=python.org
a是b
错误的
a==b
真实的
皮索诺格
b=皮索诺格
a是b
真实的
a==b
真实的
Python 3.8简介是比较字面量乘以语法警告
鉴于使用is来比较文字量实际上是不正确的,在Python 3.8的发行说明中,引入了以下内容:
现在,当标识检查(是和不是)与某些类型的文字(如字符串、数字)一起使用时,编译器会生成语法警告。这些在解释器中经常会偶然发生,但是语言规范并不保证。该警告建议用户使用相等测试(==还有!=)代替。(由塞尔希斯托尔恰卡在bpo-34850中提供。)
因此,当我们使用存在去比较数字、字符串等字面量时,就会报语法警告:
一
2
3
四
5x=200
x是200
回溯(最近一次呼叫):
文件""中的第一行
语法警告:"是"带有文本。你是说==吗?
总结
说了这么多,其实我们只需要记住如下两点:
当要比较值是否相等时,请用==。
当要比较是否是同一个对象时,请用是。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。