我正在使用JSLint来完成JavaScript,并且在执行诸如比较语句内部之类的事情时,它会返回许多建议来替换==
(两个等号)===
(三个等号).idSele_UNVEHtype.value.length == 0
if
有没有性能优势,以代替==
用===
?
任何性能改进都会受到欢迎,因为存在许多比较运算符
如果没有进行类型转换,是否会有性能提升==
?
javascript equality operators equality-operator identity-operator
我有一个Python程序,其中两个变量设置为该值'public'
.在条件表达式中,我的比较var1 is var2
失败了,但是如果我将其更改为var1 == var2
它则返回True
.
现在,如果我打开我的Python解释器并进行相同的"是"比较,它就会成功.
>>> s1 = 'public'
>>> s2 = 'public'
>>> s2 is s1
True
Run Code Online (Sandbox Code Playgroud)
我在这里错过了什么?
==
到目前为止,我一直在我的程序中使用运算符来比较我的所有字符串.但是,我遇到了一个错误,将其中一个更改为了.equals()
,并修复了该错误.
是==
坏?什么时候应该不应该使用它?有什么不同?
我的Google-fu让我失望了.
在Python中,以下两个相等的测试是否等效?
n = 5
# Test one.
if n == 5:
print 'Yay!'
# Test two.
if n is 5:
print 'Yay!'
Run Code Online (Sandbox Code Playgroud)
对于您要比较实例的对象(list
比如说),这是否适用?
好的,所以这样的答案我的问题:
L = []
L.append(1)
if L == [1]:
print 'Yay!'
# Holds true, but...
if L is [1]:
print 'Yay!'
# Doesn't.
Run Code Online (Sandbox Code Playgroud)
所以==
测试值测试的地方is
是否是同一个对象?
我想澄清一下我是否理解正确:
==
- >是参考比较,即两个对象都指向相同的内存位置.equals()
- >计算对象中值的比较我的理解是正确的吗?
我试图理解这四种方法之间的区别.我知道默认情况下==
调用的方法equal?
在两个操作数引用完全相同的对象时返回true.
===
默认情况下也调用==
哪个调用equal?
...好吧,所以如果所有这三个方法都没有被覆盖,那么我猜
===
,==
并且equal?
做同样的事情?
现在来了eql?
.这是做什么的(默认情况下)?它是否调用操作数的hash/id?
为什么Ruby有这么多的平等标志?他们应该在语义上有所不同吗?
我注意到我写的一个Python脚本是松散的,并将其追溯到一个无限循环,循环条件是while line is not ''
.在调试器中运行它,事实证明该行''
.当我改为!=''
而不是is not ''
,它工作得很好.
另外,通常认为默认情况下使用'=='会更好,即使在比较int或Boolean值时也是如此?我一直喜欢使用'是'因为我发现它更美观和pythonic(这就是我陷入这个陷阱...),但我想知道它是否只是为了保留当你关心找到两个具有相同id的对象.
==
和之间有什么区别===
?
==
比较究竟是如何运作的?===
比较究竟是如何运作的?什么是有用的例子?
在编写自定义类时,通过==
和!=
运算符允许等效通常很重要.在Python中,这可以通过分别实现__eq__
和__ne__
特殊方法来实现.我发现这样做的最简单方法是以下方法:
class Foo:
def __init__(self, item):
self.item = item
def __eq__(self, other):
if isinstance(other, self.__class__):
return self.__dict__ == other.__dict__
else:
return False
def __ne__(self, other):
return not self.__eq__(other)
Run Code Online (Sandbox Code Playgroud)
你知道更优雅的做法吗?您是否知道使用上述比较方法的任何特殊缺点__dict__
?
注意:有点澄清 - 何时__eq__
和__ne__
未定义,您会发现此行为:
>>> a = Foo(1)
>>> b = Foo(1)
>>> a is b
False
>>> a == b
False
Run Code Online (Sandbox Code Playgroud)
也就是说,a == b
评估是False
因为它真的运行a is b
,是对身份的测试(即" a
与...相同的对象b
"). …
我学习C++操作符重载,我看到==
和!=
仅仅是可定制的用户定义类型的一些特殊功能.但我担心的是,为什么需要两个单独的定义?我认为如果a == b
是真的,则a != b
自动为假,反之亦然,并且没有其他可能性,因为根据定义,a != b
是!(a == b)
.我无法想象任何情况都不是这样.但也许我的想象力是有限的,或者我对某些东西一无所知?
我知道我可以用另一个来定义一个,但这不是我要问的.我也没有询问按价值或身份比较对象之间的区别.或者两个对象是否可以同时相等且不相等(这绝对不是一个选项!这些东西是相互排斥的).我问的是这个:
是否有任何情况可以提出有关两个对象相等的问题是否有意义,但是询问它们不相等是没有意义的?(无论是从用户的角度,还是从实施者的角度来看)
如果没有这种可能性,那么为什么地球上C++会将这两个运算符定义为两个不同的函数?
equality ×10
comparison ×4
python ×4
operators ×3
string ×3
identity ×2
java ×2
c++ ×1
equivalence ×1
javascript ×1
php ×1
reference ×1
ruby ×1
semantics ×1