Я не понимаю вопроса.
Есть две вещи с совершенно разной семантикой, представленные как «альтернативы».
Преобразование типа — это одно. Он работает с любым объектом, который поддерживает __float__
, а это могут быть самые разные объекты, лишь немногие из которых являются числовыми.
try:
myinput = float(input)
except:
raise ValueError("input is not a well-formed number")
# at this point, input may not be numeric at all
# it may, however, have produced a numeric value
Типовой тест - это другое. Это работает только с объектами, которые являются надлежащими экземплярами определенного набора классов.
isinstance(input, (float, int, long) )
# at this point, input is one of a known list of numeric types
Вот пример класса, который отвечает на float
, но все еще не является числовым.
class MyStrangeThing( object ):
def __init__( self, aString ):
# Some fancy parsing
def __float__( self ):
# extract some numeric value from my thing
Вопрос «действительные числа (целые или с плавающей запятой)» вообще неактуален. Многие вещи являются «числовыми» и могут использоваться в числовых операциях, но не являются целыми числами или числами с плавающей запятой. Например, вы могли загрузить или создать пакет рациональных чисел.
Нет смысла перепроверять входные данные, если только у вас нет алгоритма, который не будет работать с некоторыми типами. Это редкость, но для некоторых вычислений требуются целые числа, в частности, чтобы они могли выполнять целочисленное деление и операции с остатком. Для них вы можете захотеть утверждать, что ваши значения являются целыми.
person
S.Lott
schedule
16.12.2008