是否有理由使用"是"?

Gar*_*erg 2 python syntax operators comparison-operators

而不是"=="?我知道"是"是什么,它正在比较变量的身份.但是你什么时候想做呢?它为我所做的一切都是造成问题的原因.使用它一段时间后(因为我觉得它使我的代码更具可读性),我不会对"是"宣战.

有没有人用它来做"=="不会做的事情?我不明白为什么他们没有'''与'=='相同的东西,就像他们制作'和'和'&&'一样.如果有人想要指针,他们只需说"id (x)== id(y)"我们不会有这种混乱.

它是我不理解的python中的"陷阱"之一,并且绊倒了很多新手.我认为它让人们吵架的原因是他们不明白为什么会进行身份比较.有什么意义(呃)?

编辑:谢谢你的答案.我认为新人应该带走的是"总是使用'​​==',除非你知道你在做什么"!

小智 7

是的,有一个原因.

当您想要比较对象标识("相同对象")而不是对象相等("相同值")时.几乎在所有情况下==(对象相等)都是正确的运算符.(正如评论中指出的那样,我完全跳过的琐碎案例是x is None成语 - None是唯一的居民NoneType.)

对象标识的一种情况是身份 - 缓存/字典,它是某些代理或"由内而外"情况下的常见模式.在这种情况下,我不希望"类似对象"的值回来,我想要"同一个对象"的值.

快乐的编码.


思考Python中的指针是错误的.Python中的值是对象,每个值都代表自身.也就是说,x is y当是唯一真正xy评估,以相同的对象.当在python中传递对象时,同样的概念成立 - 对象本身被传递.无需考虑参考文献.

Python是按共享呼叫/按对象共享分享,尽管"官方文档位置"中存在的"Call-By-Reference"一词通常被错误地用于描述行为(也许是"轻松"从其他语言过渡,其中术语也经常被错误地使用).