Voici comment je l'ai fait:
inNumber = somenumber
inNumberint = int(inNumber)
if inNumber == inNumberint:
print "this number is an int"
else:
print "this number is a float"
Quelque chose comme ca.
Existe-t-il des moyens plus agréables de procéder?
assert isinstance(inNumber, (int, float)), "inNumber is neither int nor float, it is %s" % type(inNumber)
était ce que je cherchais lorsque j'ai trouvé cette question avec Google.Réponses:
Utilisez l' instance .
Alors:
_ÉDITER:_
Comme indiqué, en cas de longs entiers, ce qui précède ne fonctionnera pas. Vous devez donc faire:
la source
issubclass
plus générique?issubclass
serait une erreur, car cela fonctionne sur les classes.isinstance
vérifie si un objet donné est une instance d'une classe ou de l'une des sous-classes de cette classe , il est donc parfaitement générique. Methinks quiisinstance(obj, cls)
équivaut àissubclass(obj.__class__, cls)
x = 12L
. Je sais que seule laint
demande a été faite, mais il est agréable de résoudre d'autres problèmes avant qu'ils ne surviennent. Le plus générique est probablementisinstance(x, numbers.Integral)
.isinstance(x, (int, long))
.isinstance(True, int)
J'aime le plus la réponse de @ ninjagecko.
Cela fonctionnerait également:
il existe également des types complexes pour les nombres complexes
la source
isinstance(False, (int, float)) = True
), j'avais besoin à lanot isinstance(n, bool) and isinstance(n, (int, float))
placeBon mot:
Cela évite certains problèmes:
Démo:
la source
isinstance(99**10,int)
estTrue
.Il est plus facile de demander pardon que de demander la permission. Effectuez simplement l'opération. Si cela fonctionne, l'objet était d'un type acceptable, approprié et approprié. Si l'opération ne fonctionne pas, l'objet n'était pas d'un type approprié. Connaître le type aide rarement.
Essayez simplement l'opération et voyez si cela fonctionne.
la source
type
etisinstance
peut faire le travail?class MetaInt(type): pass; class Int(int): __metaclass__ = MetaInt; type(Int(1)) == int
. (Désolé pour la mauvaise syntaxe mais je ne peux pas faire plus sur une seule ligne.)int
etfloat
peut même ne pas être pertinente pour de nombreux algorithmes. La demande explicite du type est généralement un signe de mauvais polymorphisme ou un problème de conception encore plus grave. En bref. Ne vérifiez pas les types. Il est plus facile de demander pardon que de demander la permission.Ce que vous pouvez aussi faire, c'est utiliser
type()
Exemple:la source
Voici un morceau de code qui vérifie si un nombre est un entier ou non, il fonctionne à la fois pour Python 2 et Python 3.
Notez que Python 2 a les deux types
int
etlong
, tandis que Python 3 n'a que le typeint
. Source .Si vous souhaitez vérifier si votre numéro est un
float
qui représente unint
, procédez comme suitSi vous n'avez pas besoin de faire la distinction entre int et float, et que vous êtes d'accord non plus, alors la réponse de ninjagecko est la voie à suivre
la source
que diriez-vous de cette solution?
la source
Je sais que c'est un vieux fil mais c'est quelque chose que j'utilise et j'ai pensé que ça pourrait aider.
Il fonctionne en python 2.7 et python 3 <.
la source
Vous pouvez utiliser modulo pour déterminer si x est un entier numériquement. La
isinstance(x, int)
méthode détermine uniquement si x est un entier par type:la source
3.2 % 2
rendements1.4
. Whatchu talkin 'bout bout, Willi (s | am)? De plus, vous obtiendrez unTypeError
si x n'est pas un nombre pour commencer, donc votre programme sex%1 == 0
devrait être vrai uniquement pour les entiers (mais ce sera également vrai pour les flottants avec seulement un zéro après le point décimal). Si vous savez que ce sera un int (par exemple, s'il s'agit d'un paramètre d'une fonction), vous pouvez simplement vérifier avec modulo. Je parie que c'est plus rapide queMath.floor(x) == x
. Du côté moins brillant, ce seraTrue
si vous passez un flotteur comme1.0
ou5.0
, et vous rencontrerez le même problème en utilisant ce que l'affiche originale mentionnée dans sa question.Testé dans Python version 3.6.3 Shell
Impossible de trouver quoi que ce soit pour travailler.
la source
veuillez vérifier ceci: importer des numéros
Bien que X soit flottant mais que la valeur soit un entier, donc si vous voulez vérifier que la valeur est un entier, vous ne pouvez pas utiliser isinstance et vous devez comparer les valeurs et non les types.
la source
la source
Mise à jour: essayez ceci
la source
Vous pouvez le faire avec une simple instruction if
Pour vérifier le flotteur
si type (a) == type (1.1)
Pour vérifier le type entier
si type (a) == type (1)
la source
la source
Essaye ça...
la source
variable.isnumeric
vérifie si une valeur est un entier:la source