В Java числовые типы все спускаются с номера, поэтому я бы использовал
(x instanceof Number).
Что такое эквивалент python?
В Java числовые типы все спускаются с номера, поэтому я бы использовал
(x instanceof Number).
Что такое эквивалент python?
В более поздних версиях Python (версии 2.6+, в более старых версиях вы почти ограничены проверкой нескольких жесткокодированных типов), правильный способ - проверить, является ли ваша переменная экземпляром numbers.Number
:
>>> import numbers
>>> import decimal
>>> [isinstance(x, numbers.Number) for x in (0, 0.0, 0j, decimal.Decimal(0))]
[True, True, True, True]
Это использует ABC и будет работать для всех встроенных числовых классов, а также для всех сторонних классов, если они стоят их соль (зарегистрирована как подклассы Number
ABC). Тем не менее, во многих случаях вам не следует беспокоиться о проверке ввода вручную - Python утилит и смешивает несколько совместимых типов, как правило, работает, но при этом будет отображаться сообщение об ошибке, когда некоторая операция не имеет смысла (4 - "1"
), поэтому проверка вручную очень редко необходима. Это просто бонус, вы можете добавить его при завершении этого модуля, чтобы не дотрагиваться до других с деталями реализации.
Python 2: isinstance(x, (int, long, float, complex)) and not isinstance(x, bool)
Python 3: isinstance(x, (int, float, complex)) and not isinstance(x, bool)
Используйте Number
из модуля numbers
для тестирования isinstance(n, Number)
(доступно с версии 2.6).
isinstance(n, numbers.Number)
Здесь он находится в действии с различными типами чисел и одним не числом:
>>> from numbers import Number
... from decimal import Decimal
... from fractions import Fraction
... for n in [2, 2.0, Decimal('2.0'), complex(2,0), Fraction(2,1), '2']:
... print '%15s %s' % (n.__repr__(), isinstance(n, Number))
2 True
2.0 True
Decimal('2.0') True
(2+0j) True
Fraction(2, 1) True
'2' False
Это, конечно, вопреки уткам. Если вас больше беспокоит то, как действует объект, а не то, что он есть, выполните свои операции так, как будто у вас есть номер, и используйте исключения, чтобы сообщить вам об этом.
Конечно, вы можете использовать isinstance
, но имейте в виду, что это не так, как работает Python. Python - утиный язык. Вы не должны явно проверять свои типы. A TypeError
будет поднят, если был принят неверный тип.
Так что просто предположим, что это int
. Не утруждайте себя проверкой.
Это не так, как работает python. Просто используйте его так же, как и число, и если кто-то передает вам что-то, что не число, терпит неудачу. Это ответственность программиста за правильные типы.
он работает
isinstance(TheNumber, (int,float, ...)