"是"如何在python中工作?

mil*_*cak 9 python module

可以请某人解释如何在'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)

有没有办法在这里使用'是'?谢谢.

Joh*_*web 7

文档:

对象标识的运算符isis 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)

  • 注意,由于重合,"1 + 2是3"碰巧是"真"(由于性能原因,小整数被预先分配). (2认同)

650*_*502 7

ispython中的运算符用于检查两个变量是否指向同一个对象,并不打算用于检查数字相等性.你应该使用==它.

例如,考虑一下

(1000 + 1000) is (1000 + 1000)
Run Code Online (Sandbox Code Playgroud)

回报False.


Bjö*_*lex 6

is检查对象标识.如果两个名称引用同一个对象,则返回true.一个典型的用例是检查名称是否指的是None:

if foo is None:
    # do stuff
Run Code Online (Sandbox Code Playgroud)