我用python编写了函数:
def is_number_like(x):
try:
int(x) + 1
except:
return False
return True
如果我写float(x)
或int(x)
,有什么区别吗?或者+ 1
部分在某些情况下有用吗?在
{t{cd5>要传递的是什么。我想要一个函数,它将在任何时候返回False
作为参数传递一个类似文本的值。有办法吗?在
也许:
^{pr2}$会更好吗?在
或者可能:
def is_number_like(x):
try:
float(x + 1) == float(x) + 1
except:
return False
return True
我想写一个模块,它可以接受任何表现良好的数字类型,它代表一维实数(例如SimpleITK.sitkUInt8
数字类型或numpy.int32
等等…)。在
我担心可能会有库,在转换为int或float时不会抛出错误。例如,我可以想象这样的情况:
>>> z = SomeComplexType(1. + 2.j)
>>> z
(1+2j)
>>> z -= 2.j
>>> z
(1+0j)
>>> float(z) # does not raise an error
1.
这可能吗,我应该担心这种情况吗?在
所有设计良好的实数类型都会转换成float
而不会出错吗?在
{如果你能理解一个物体的行为是否正确。如果是这样,还有一种更简单的方法:
在}之间有区别。在
float(..)
和{float(..)
将尝试解析str
ing或任何具有__float__
方法的对象。例如,int
,float
和{__float__
方法如果要将复数转换为
float(..)
,则会出错:
^{pr2}$float(..)
函数的结果保证是float
:如果__float__
方法返回一个非浮点值,它将引发一个TypeError
:因此,一次简单的
float(..)
尝试就足够了:Python中的大多数numeric-like类型(比如
numpy.int16
)**支持这样的__float__
方法。在另一方面,
int(..)
与str
和__int__
方法一起工作。同样,如果您调用int(..)
,那么结果肯定是int
。在因此在python-3.x中,可以使用两个检查:一个用于
float(..)
,另一个用于int(..)
:或者,如果要返回类似数字的对象:
(如果两次尝试都失败,则返回
None
)。在请注意,在python-2.x中,还有一个
long
类型(猜猜看,它与__long__
一起工作)。在在python中,复数不能直接转换为int或float,这将引发一个
TypeError: can't convert complex to...
。在除“int或float convertible”之外的任何其他对象都将引发
ValueError
。在要使自定义类中的对象成为“convertible”,必须定义适当的“dunders”},see doc
__int__
和{因此,检查对象是否可以转换为实数的函数可以执行以下操作:
相关问题 更多 >
编程相关推荐