可以请某人解释如何在'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)
有没有办法在这里使用'是'?谢谢.
从文档:
对象标识的运算符
is和is not测试:x is y当且仅当x和y是同一个对象时才为真.x is not y产生反向真值.
你想要的是==,通过比较值而不是身份来测试两个对象是否相等或等效.
一个简单的例子(在CPython中可能与其他实现不同):
>>> 1 + 2 == 3.0
True
>>> 1 + 2 is 3.0
False
>>> 1 + 2 is 3
True
>>> id(1 + 2)
4298185512
>>> id(3.0)
4298194656
>>> id(3)
4298185512
Run Code Online (Sandbox Code Playgroud)
ispython中的运算符用于检查两个变量是否指向同一个对象,并不打算用于检查数字相等性.你应该使用==它.
例如,考虑一下
(1000 + 1000) is (1000 + 1000)
Run Code Online (Sandbox Code Playgroud)
回报False.
is检查对象标识.如果两个名称引用同一个对象,则返回true.一个典型的用例是检查名称是否指的是None:
if foo is None:
# do stuff
Run Code Online (Sandbox Code Playgroud)