В 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, ...)