我的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是否是同一个对象?
在对这个问题的评论中,我看到了一个建议使用的声明
result is not None
Run Code Online (Sandbox Code Playgroud)
VS
result != None
Run Code Online (Sandbox Code Playgroud)
我想知道区别是什么,以及为什么可能推荐另一个?
奇怪的是:
>>> a = 123
>>> b = 123
>>> a is b
True
>>> a = 123.
>>> b = 123.
>>> a is b
False
Run Code Online (Sandbox Code Playgroud)
似乎a is b或多或少被定义为id(a) == id(b).以这种方式制作错误很容易:
basename, ext = os.path.splitext(fname)
if ext is '.mp3':
# do something
else:
# do something else
Run Code Online (Sandbox Code Playgroud)
一些fnames意外地在else块中结束了.修复很简单,我们应该使用ext == '.mp3',但if ext is '.mp3'表面上看起来似乎是一种很好的pythonic方式来编写它,它比"正确"的方式更具可读性.
由于字符串是不可变的,为什么它是错误的技术细节是什么?什么时候身份检查更好,什么时候检查更好?
可以请某人解释如何在'if'条件下使用'is'.我正在使用分数模块,我遇到了一些麻烦:
>>> Fraction(0, 1) is 0
False
>>> float(Fraction(0, 1))
0.0
>>> float(Fraction(0,1)) is 0.0
False
Run Code Online (Sandbox Code Playgroud)
我发现的唯一工作是:
>>> F = Fraction(a,b)
>>> if F >= 0:
... if F(0, 1) <= 0:
... ...
Run Code Online (Sandbox Code Playgroud)
有没有办法在这里使用'是'?谢谢.