Python Language Tipi di dati


Esempio

Tipi incorporati

booleani

bool : un valore booleano di True o False . Le operazioni logiche come and , or , not possono essere eseguite sui booleani.

x or y    # if x is False then y otherwise x 
x and y   # if x is False then x otherwise y
not x     # if x is True then False, otherwise True

In Python 2.xe in Python 3.x, un booleano è anche un int . Il tipo di bool è una sottoclasse del tipo int e True e False sono le sue uniche istanze:

issubclass(bool, int) # True

isinstance(True, bool) # True
isinstance(False, bool) # True

Se i valori booleani vengono utilizzati nelle operazioni aritmetiche, i loro valori interi ( 1 e 0 per True e False ) verranno utilizzati per restituire un risultato intero:

True + False == 1 # 1 + 0 == 1
True * True  == 1 # 1 * 1 == 1

Numeri

  • int : numero intero

    a = 2
    b = 100
    c = 123456789
    d = 38563846326424324
    

    Gli interi in Python hanno dimensioni arbitrarie.

    Nota: nelle versioni precedenti di Python era disponibile un tipo long diverso da int . I due sono stati unificati.

  • float : numero in virgola mobile; la precisione dipende dall'implementazione e dall'architettura di sistema, per CPython il tipo di dati float corrisponde a un doppio C.

    a = 2.0
    b = 100.e0
    c = 123456789.e1
    
  • complex : numeri complessi

    a = 2 + 1j
    b = 100 + 10j
    

Gli operatori < , <= , > e >= TypeError un'eccezione TypeError quando qualsiasi operando è un numero complesso.

stringhe

Python 3.x 3.0
  • str : una stringa unicode . Il tipo di 'hello'
  • bytes : una stringa di byte . Il tipo di b'hello'
Python 2.x 2.7
  • str : una stringa di byte . Il tipo di 'hello'
  • bytes : sinonimo di str
  • unicode : una stringa unicode . Il tipo di u'hello'

Sequenze e collezioni

Python distingue tra sequenze ordinate e raccolte non ordinate (come set e dict ).

  • le stringhe ( str , bytes , unicode ) sono sequenze

  • reversed : un ordine inverso di str con funzione reversed

    a = reversed('hello')
    
  • tuple : una raccolta ordinata di n valori di qualsiasi tipo ( n >= 0 ).

    a = (1, 2, 3)
    b = ('a', 1, 'python', (1, 2))
    b[2] = 'something else' # returns a TypeError
    

    Supporta l'indicizzazione; immutabile; lavabile se tutti i suoi membri sono lavabili

  • list : una raccolta ordinata di n valori ( n >= 0 )

    a = [1, 2, 3]
    b = ['a', 1, 'python', (1, 2), [1, 2]]
    b[2] = 'something else' # allowed
    

    Non lavabile; mutevole.

  • set : una collezione non ordinata di valori unici. Gli articoli devono essere lavabili .

    a = {1, 2, 'a'}
    
  • dict : una collezione non ordinata di coppie chiave-valore uniche; le chiavi devono essere lavabili

    a = {1: 'one',
         2: 'two'}
    
    b = {'a': [1, 2, 3],
         'b': 'a string'}
    

Un oggetto è lavabile se ha un valore di hash che non cambia mai durante la sua vita (ha bisogno di un __hash__() ) e può essere paragonato ad altri oggetti (ha bisogno di un __eq__() ). Gli oggetti lavabili che confrontano l'uguaglianza devono avere lo stesso valore di hash.

Costanti incorporate

In combinazione con i tipi di dati incorporati c'è un piccolo numero di costanti incorporate nello spazio dei nomi integrato:

  • True : il vero valore del bool
  • False : il valore falso del tipo built-in bool
  • None : un oggetto singleton utilizzato per segnalare che un valore è assente.
  • Ellipsis o ... : utilizzato in core Python3 + ovunque e limitato l'uso in Python2.7 + come parte della notazione array. numpy e pacchetti correlati usano questo come riferimento "include tutto" nelle matrici.
  • NotImplemented : un singleton utilizzato per indicare a Python che un metodo speciale non supporta gli argomenti specifici e Python proverà delle alternative se disponibili.
a = None # No value will be assigned. Any valid datatype can be assigned later
Python 3.x 3.0

None non ha ordini naturali. L'utilizzo degli operatori di confronto degli ordini ( < , <= , >= , > ) non è più supportato e genererà un TypeError .

Python 2.x 2.7

None è sempre inferiore a qualsiasi numero ( None < -32 True ).

Test del tipo di variabili

In python, possiamo controllare il tipo di dati di un oggetto usando il type funzione built-in.

a = '123'
print(type(a))
# Out: <class 'str'>
b = 123
print(type(b))
# Out: <class 'int'>

Nelle istruzioni condizionali è possibile testare il tipo di dati con isinstance . Tuttavia, di solito non è incoraggiato a fare affidamento sul tipo di variabile.

i = 7
if isinstance(i, int):
    i += 1
elif isinstance(i, str):
    i = int(i)
    i += 1

Per informazioni sulle differenze tra type() e isinstance() leggi: Differenze tra isinstance e type in Python

Per verificare se qualcosa è di NoneType :

x = None
if x is None:
    print('Not a surprise, I just defined x as None.')

Conversione tra tipi di dati

È possibile eseguire la conversione del tipo di dati esplicita.

Ad esempio, '123' è di tipo str e può essere convertito in intero usando la funzione int .

a = '123'
b = int(a)

La conversione da una stringa mobile come "123.456" può essere eseguita usando la funzione float .

a = '123.456'
b = float(a)
c = int(a)    # ValueError: invalid literal for int() with base 10: '123.456'
d = int(b)    # 123

Puoi anche convertire i tipi di sequenza o raccolta

a = 'hello'
list(a)  # ['h', 'e', 'l', 'l', 'o']
set(a)   # {'o', 'e', 'l', 'h'}
tuple(a) # ('h', 'e', 'l', 'l', 'o')

Tipo di stringa esplicito alla definizione di valori letterali

Con le etichette di una sola lettera di fronte alle virgolette puoi dire quale tipo di corda vuoi definire.

  • b'foo bar' : risultati bytes in Python 3, str in Python 2
  • u'foo bar' : risultati str in Python 3, unicode in Python 2
  • 'foo bar' : risultati str
  • r'foo bar' : i risultati della cosiddetta stringa raw, in cui non sono necessari caratteri speciali di escape, tutto è preso alla lettera mentre hai digitato
normal  = 'foo\nbar'   # foo
                       # bar
escaped = 'foo\\nbar'  # foo\nbar   
raw     = r'foo\nbar'  # foo\nbar

Tipi di dati mutevoli e immutabili

Un oggetto è chiamato mutevole se può essere cambiato. Ad esempio, quando si passa una lista a una funzione, l'elenco può essere modificato:

def f(m):
    m.append(3)  # adds a number to the list. This is a mutation.

x = [1, 2]
f(x)
x == [1, 2]  # False now, since an item was added to the list

Un oggetto è chiamato immutabile se non può essere modificato in alcun modo. Ad esempio, gli interi sono immutabili, poiché non c'è modo di cambiarli:

def bar():
    x = (1, 2)
    g(x)
    x == (1, 2)  # Will always be True, since no function can change the object (1, 2)

Nota che le variabili stesse sono mutabili, quindi possiamo riassegnare la variabile x , ma questo non cambia l'oggetto che x aveva precedentemente indicato. Ha fatto solo x puntare a un nuovo oggetto.

I tipi di dati le cui istanze sono mutabili sono chiamati tipi di dati mutabili e, analogamente, per oggetti e tipi di dati immutabili.

Esempi di tipi di dati immutabili:

  • int , long , float , complex
  • str
  • bytes
  • tuple
  • frozenset

Esempi di tipi di dati mutabili:

  • bytearray
  • list
  • set
  • dict