Kontrol af, om en variabel er et heltal eller ej

Hvordan kontrollerer jeg, om en variabel er et heltal?

Løsning

Hvis du har brug for det, skal du gøre følgende

isinstance(, int)

medmindre du er i Python 2.x, i hvilket tilfælde du vil have

isinstance(, (int, long))

Brug ikke type. Det er næsten aldrig det rigtige svar i Python, da det blokerer for al fleksibiliteten i polymorphisme. Hvis du f.eks. underklasserer int, skal din nye klasse registrere sig som int, hvilket type ikke gør:

class Spam(int): pass
x = Spam(0)
type(x) == int # False
isinstance(x, int) # True

Dette overholder Python's stærke polymorfisme: du bør tillade ethvert objekt, der opfører sig som en int, i stedet for at foreskrive, at det skal være en sådan.

BUT

Den klassiske Python-mentalitet er dog, at det er lettere at bede om tilgivelse end om tilladelse. Med andre ord, lad være med at kontrollere om x er et heltal; antag at det er det og fang undtagelsen hvis det ikke er det:

try:
    x += 1
except TypeError:
    ...

Denne mentalitet er langsomt ved at blive overhalet af brugen af abstrakte basisklasser, som lader dig registrere præcis hvilke egenskaber dit objekt skal have (addition? multiplikation? fordobling?) ved at lade det arve fra en specielt konstrueret klasse. Det ville være den bedste løsning, da det vil tillade præcis disse objekter med de nødvendige og tilstrækkelige egenskaber, men du bliver nødt til at læse dokumentationen om, hvordan du bruger den.

Kommentarer (14)
>>> isinstance(3, int)
True

Se her for mere.

Bemærk, at dette ikke hjælper, hvis du leder efter int-lignende attributter. I dette tilfælde skal du måske også tjekke for long:

>>> isinstance(3L, (long, int))
True

Jeg'har set kontroller af denne art mod en array/index-type i Python-kilden, men jeg tror ikke, at det er synligt uden for C.

Token SO svar: Er du sikker på, at du skal kontrollere dens type? Enten don't pass en type du ikke kan'håndtere, eller don't forsøge at overliste dine potentielle kode genbrugere, de kan have en god grund til ikke at pass en int til din funktion.

Kommentarer (8)

Jeg har fundet et [relateret spørgsmål] (https://stackoverflow.com/questions/402504/how-to-determine-the-variable-type-in-python) her på SO selv.

Python-udviklere foretrækker ikke at kontrollere typer, men at udføre en type-specifik operation og fange en TypeError-undtagelse. Men hvis du ikke kender typen, så har du følgende.

>>> i = 12345
>>> type(i)

>>> type(i) is int
True
Kommentarer (3)