Python 其中number==int(number)无法将number变量分类为整数?
我知道isinstance(),但我只是好奇为什么我们不使用:Python 其中number==int(number)无法将number变量分类为整数?,python,python-3.x,Python,Python 3.x,我知道isinstance(),但我只是好奇为什么我们不使用: number==int(number)。简言之:这两种方法做的事情完全不同:检查可能会返回True,如果某个对象不是int,它将针对许多要转换为int的类型引发ValueError或TypeError,甚至有时,上面的语句也可能返回False isinstance(…)方法进一步明确了您正在做什么,并且更方便。例如,您可以使用isinstance(1.0,(int,float))检查某个对象是int还是float 案例1:对于非i
number==int(number)。简言之:这两种方法做的事情完全不同:检查可能会返回
True
,如果某个对象不是int
,它将针对许多要转换为int
的类型引发ValueError
或TypeError
,甚至有时,上面的语句也可能返回False
isinstance(…)
方法进一步明确了您正在做什么,并且更方便。例如,您可以使用isinstance(1.0,(int,float))
检查某个对象是int
还是float
案例1:对于非
int
s,返回True
因为不能保证这只会为int
eger返回True
,甚至可能引发错误
一个简单的反例是1.0
。这是一个浮动:
>>> number = 1.0
>>> type(number)
<class 'float'>
>>> number == int(number)
True
这会产生一个ValueError
,因为当我们想将其转换为int
时,'foo'
毫无意义
案例3:提出一个TypeError
并非所有类都实现\uuuuu int\uuuu
函数,该函数在窗帘后面被调用以转换为int
。例如,一个简单的对象没有这样的函数。在这种情况下,它将引发类型错误:
>>> int(object())
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: int() argument must be a string, a bytes-like object or a number, not 'object'
如果我们检查上述内容,我们会看到:
>>> foo = Foo()
>>> foo == int(foo)
False
>>> isinstance(foo, int)
True
在许多情况下,因为
False
比ValueError
或TypeError
更有用。因为int(…)
将某物转换为int
。此外,由于=
可以重载,这意味着非int可以与之匹配。一个简单的反例是:14.00
的类型是float
,但是number==int(number)
将在这里工作。
class Foo(int):
def __eq__(self, other):
return isinstance(other, Foo)
def __int__(self):
return self
>>> foo = Foo()
>>> foo == int(foo)
False
>>> isinstance(foo, int)
True