Aqui está como eu fiz isso:
inNumber = somenumber
inNumberint = int(inNumber)
if inNumber == inNumberint:
print "this number is an int"
else:
print "this number is a float"
Algo parecido.
Existem maneiras mais agradáveis de fazer isso?
assert isinstance(inNumber, (int, float)), "inNumber is neither int nor float, it is %s" % type(inNumber)
era o que eu procurava quando encontrei essa pergunta no Google.Respostas:
Use uma instância .
Assim:
_EDITAR:_
Como apontado, no caso de números inteiros longos, o acima não funcionará. Então você precisa fazer:
fonte
issubclass
seria mais genérico?issubclass
seria um erro, pois funciona em classes.isinstance
verifica se um determinado objeto é uma instância de uma classe ou uma das subclasses dessa classe , portanto é perfeitamente genérico. Parece-me queisinstance(obj, cls)
é equivalente aissubclass(obj.__class__, cls)
x = 12L
. Eu sei que apenasint
foi solicitado, mas é bom corrigir outros problemas antes que eles aconteçam. O mais genérico é provavelmenteisinstance(x, numbers.Integral)
.isinstance(x, (int, long))
.isinstance(True, int)
Eu gosto mais da resposta do @ ninjagecko.
Isso também funcionaria:
também há complexo de tipos para números complexos
fonte
isinstance(False, (int, float)) = True
), eu precisavanot isinstance(n, bool) and isinstance(n, (int, float))
dissoUma linha:
Isso evita alguns problemas:
Demo:
fonte
isinstance(99**10,int)
éTrue
.É mais fácil pedir perdão do que pedir permissão. Simplesmente execute a operação. Se funcionar, o objeto era de um tipo aceitável, adequado e adequado. Se a operação não funcionar, o objeto não era do tipo adequado. Conhecer o tipo raramente ajuda.
Simplesmente tente a operação e veja se funciona.
fonte
type
eisinstance
pode fazer o trabalho?class MetaInt(type): pass; class Int(int): __metaclass__ = MetaInt; type(Int(1)) == int
. (Desculpe pela sintaxe ruim, mas não posso fazer mais em uma linha.)int
efloat
pode até não ser relevante para muitos algoritmos. Solicitar explicitamente o tipo geralmente é um sinal de polimorfismo ruim ou um problema de design ainda mais sério. Em resumo. Não verifique os tipos. É mais fácil pedir perdão do que pedir permissão.O que você também pode fazer é usar o
type()
Exemplo:fonte
Aqui está um pedaço de código que verifica se um número é um número inteiro ou não; ele funciona tanto para o Python 2 quanto para o Python 3.
Observe que o Python 2 possui dois tipos
int
elong
, enquanto o Python 3 possui apenas o tipoint
. Fonte .Se você deseja verificar se o seu número é um
float
que representa umint
, faça issoSe você não precisa distinguir entre int e float, e está bem com qualquer um deles, então a resposta de ninjagecko é o caminho a percorrer
fonte
que tal esta solução?
fonte
Eu sei que é um tópico antigo, mas isso é algo que estou usando e achei que poderia ajudar.
Funciona em python 2.7 e python 3 <.
fonte
Você pode usar o módulo para determinar se x é um número inteiro numericamente. O
isinstance(x, int)
método determina apenas se x é um número inteiro por tipo:fonte
3.2 % 2
rendimentos1.4
. O que você está falando, Willi? Além disso, você vai ter umTypeError
caso x não é um número para começar, para que o seu programa iria sair prematuramente se você seguiu este conselho ...x%1 == 0
deve ser verdadeiro apenas para ints (mas também será verdadeiro para flutuadores com apenas um zero após o ponto decimal). Se você sabe que vai ser um int (por exemplo, se este é um parâmetro para uma função), então você pode apenas verificar com o módulo. Aposto que é mais rápido queMath.floor(x) == x
. No lado não tão brilhante, isso aconteceráTrue
se você passar por um carro alegórico como1.0
ou5.0
, e você encontrará o mesmo problema usando o que o pôster original mencionou em sua pergunta.Tentei no Python versão 3.6.3 Shell
Não foi possível descobrir nada para trabalhar.
fonte
pls verifique isto: números de importação
Embora X seja flutuante, mas o valor seja inteiro, portanto, se você quiser verificar se o valor é inteiro, não poderá usar isinstance e precisará comparar valores e não tipos.
fonte
fonte
Atualização: tente isso
fonte
Você pode fazer isso com uma instrução if simples
Para verificar se há flutuador
se tipo (a) == tipo (1.1)
Para verificar o tipo inteiro
se tipo (a) == tipo (1)
fonte
fonte
Tente isso ...
fonte
variable.isnumeric
verifica se um valor é um número inteiro:fonte