Domanda

Sto imparando Python per una classe, e abbiamo appena coperto tuple come uno dei tipi di dati.Ho letto la pagina di Wikipedia su di esso, ma non riuscivo a capire dove tale tipo di dati può essere utile per la pratica.Posso avere un po ' di esempi, forse in Python, dove un immutabile serie di numeri sarebbero necessari?Come è diversa da una lista?

È stato utile?

Soluzione

  • Le tuple vengono utilizzati ogni volta che si desidera tornare più risultati di una funzione.
  • Dal momento che sono immutabili, possono essere utilizzati come chiavi di un dizionario (elenchi non possono).

Altri suggerimenti

Tuple fare un buon dizionario tasti quando è necessario combinare più di un pezzo di dati nella chiave e non ho voglia di fare una classe per esso.

a = {}
a[(1,2,"bob")] = "hello!"
a[("Hello","en-US")] = "Hi There!"

Ho usato questa funzione principalmente per la creazione di un dizionario con i tasti che sono coordinate dei vertici di una mesh.Tuttavia, nel mio caso in particolare, il confronto esatto dei carri coinvolte hanno lavorato bene, che potrebbe non essere sempre vero per i vostri scopi [nel qual caso probabilmente sarei la conversione in arrivo galleggia per un qualche tipo di punto fisso di integer]

Mi piace questa spiegazione.

In sostanza, si dovrebbe utilizzare tuple quando c'è una costante di struttura (1 ° posizione tiene sempre un tipo di valore e la seconda di un altro, e così via), e le liste devono essere utilizzati per gli elenchi di valori omogenei.

Naturalmente ci sono sempre le eccezioni, ma questa è una buona linea guida generale.

Tuple e liste hanno gli stessi usi in generale.Immutabile tipi di dati, in generale, hanno molti vantaggi, soprattutto per i problemi di concorrenza.

Così, quando si dispone di elenchi che non sono volatili in natura ed è necessario per garantire che nessun consumatore è di alterare, è possibile utilizzare una tupla.

Tipici esempi sono dati fissi in un'applicazione come di rami d'azienda, categorie, etc.Se questa modifica dei dati, in genere un singolo produttore rebuilts tupla.

Il modo migliore di pensare è:

  • Una tupla è un record i cui campi non hanno un nome.
  • Si utilizza una tupla invece di un record quando non si può essere preso la briga di specificare i nomi dei campi.

Così, invece di scrivere cose del genere:

person = {"name": "Sam", "age": 42}
name, age = person["name"], person["age"]

O, ancora più dettagliato:

class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age

person = Person("Sam", 42)
name, age = person.name, person.age

Si può semplicemente scrivere:

person = ("Sam", 42)
name, age = person

Questo è utile quando si desidera passare circa un record che ha solo un paio di campi, o un record che è usato solo in un paio di posti.In tal caso specificare un nuovo tipo di record con i nomi di campo (in Python, devi usare un oggetto o di un dizionario, come sopra) potrebbe essere troppo prolisso.

Tuple hanno origine dal mondo della programmazione funzionale (Haskell, OCaml, Olmo, F#, etc.), dove sono comunemente usati per questo scopo.A differenza di Python, la maggior parte dei linguaggi di programmazione funzionale, sono staticamente tipizzato (una variabile può contenere un solo tipo di valore, e di che tipo è determinato al momento della compilazione).La tipizzazione statica rende il ruolo di tuple più evidente.Per esempio, nel Olmo lingua:

type alias Person = (String, Int)

person : Person
person = ("Sam", 42)

Questo evidenzia il fatto che un particolare tipo di tupla è sempre dovuto avere un numero fisso di campi in un ordine fisso, e ciascuno di questi campi è sempre dovrebbe essere dello stesso tipo.In questo esempio, una persona è sempre una tupla di due campi, uno è una stringa e l'altro è un numero intero.

Sopra è in netto contrasto con le liste, che si suppone essere di lunghezza variabile (il numero di elementi è normalmente diversi in ciascuna lista, scrivere le funzioni per aggiungere e rimuovere elementi) e di ogni elemento della lista è normalmente dello stesso tipo.Per esempio, si dovrebbe avere un elenco di persone e un altro elenco di indirizzi - non mescolare persone e indirizzi nella stessa lista.Mentre la miscelazione di diversi tipi di dati all'interno di una stessa tupla è il punto di tuple.I campi in una tupla di solito sono di diversi tipi (ma non sempre - ad es.si potrebbe avere un (Float, Float, Float) tupla per rappresentare x,y,z le coordinate).

Tuple e le liste sono spesso annidati. E ' comune avere una lista di tuple.Si potrebbe avere una lista di persone tuple così come un elenco di oggetti Persona.Si può anche avere una tupla campo il cui valore è riportato un elenco.Per esempio, se si dispone di una rubrica in cui una persona può avere più indirizzi, si potrebbe avere una tupla di tipo (Person, [String]).Il [String] il tipo è comunemente usato nei linguaggi di programmazione funzionale, per indicare una lista di stringhe.In Python, non annotare il tipo, ma si potrebbe usare tuple come che, esattamente nello stesso modo, mettendo un Person oggetto del primo campo di una tupla e un elenco di stringhe nel secondo campo.

In Python, la confusione nasce perché la lingua non applicare qualsiasi di queste pratiche, che vengono applicate dal compilatore in staticamente tipizzato linguaggi funzionali.In queste lingue, non è possibile combinare diversi tipi di tuple.Per esempio, è in grado di restituire un (String, String) tupla da una funzione di cui il tipo dice che restituisce un (String, Integer) tupla.È anche in grado di restituire un elenco quando il tipo dice che il piano per il ritorno di una tupla, e viceversa.Gli elenchi sono utilizzati strettamente per la coltivazione di collezioni di oggetti, e le tuple strettamente per dimensione fissa record.Python non smette di rompere qualsiasi di queste regole, se si desidera.

In Python, un elenco a volte è trasformato in una tupla per l'uso come un dizionario chiave, perché Python chiavi del dizionario bisogno di essere immutabile (es.costante) valori, mentre Python liste sono modificabili (è possibile aggiungere e rimuovere elementi in qualsiasi momento).Questa è una soluzione per una particolare limitazione in Python, non una proprietà di tuple di informatica, concetto.

Così in Python, le liste sono mutevoli e le tuple sono immutabili.Ma questa è solo una scelta di design, non è una proprietà intrinseca delle liste e di tuple in informatica.Si potrebbe anche essere immutabile liste e mutevole tuple.

In Python (utilizzando il valore predefinito di CPython attuazione), le tuple sono anche più veloce di oggetti o dizionari per la maggior parte degli scopi, in modo che essi sono a volte utilizzati per questo motivo, anche quando la denominazione di campi di utilizzo di un oggetto o un dizionario sarebbe stato più chiaro.

Infine, per rendere ancora più evidente che le tuple sono destinati ad essere un altro tipo di record (non un altro tipo di lista), Python ha anche nome tuple:

from collections import namedtuple

Person = namedtuple("Person", "name age")

person = Person("Sam", 42)
name, age = person.name, person.age

Questo è spesso la scelta migliore più brevi rispetto a definizione di una nuova classe, ma il significato dei campi è più evidente rispetto a quando si utilizza il normale tuple i cui campi non hanno un nome.

Immutabile liste sono molto utili per diversi scopi, ma l'argomento è troppo complesso per rispondere qui.Il punto principale è che le cose che non può cambiare è più facile ragionare su che le cose che si possono cambiare.Più bug del software che provengono da cose che cambiano in modi inaspettati, in modo da limitare i modi in cui si può cambiare è un buon modo per eliminare i bug.Se siete interessati, vi consiglio la lettura di un tutorial per un linguaggio di programmazione funzionale come Olmo, Haskell o Clojure (Elm è il più amichevole).Il designer di lingue considerato immutabilità così utile che tutti le liste sono immutabili c'.(Invece di cambiare un elenco di aggiungere e / o rimuovere un elemento, si fare una lista con l'elemento aggiunto o rimosso.Immutabilità garantisce che la vecchia copia dell'elenco non potrà mai cambiare, in modo che il compilatore e il runtime può rendere il codice eseguire anche mediante il riutilizzo di parti del vecchio elenco in uno nuovo e rifiuti-la raccolta di sinistra-over parti quando non sono più necessari.)

Io li trovo utili quando si ha sempre a che fare con due o più oggetti in un insieme.

Una tupla è una sequenza di valori.I valori possono essere di qualsiasi tipo, e sono indicizzati da integer, quindi tuple non sono come le liste.La differenza più importante è che le tuple sono immutabili.

Una tupla è un elenco separato da virgole di valori:

t = 'p', 'q', 'r', 's', 't'

è buona norma allegare le tuple in parentesi:

t = ('p', 'q', 'r', 's', 't') 

Una lista sempre possibile sostituire una tupla, in relazione alla funzionalità (tranne, a quanto pare, come chiavi, in un dict).Tuttavia, una tupla può rendere le cose più veloci.Lo stesso vale per, ad esempio, immutabile stringhe in Java -- quando avete bisogno di essere in grado di cambiare le corde?Mai!

Ho appena letto una discussione decente sul limitare ciò che si può fare per fare meglio i programmi; Perché Perché La Programmazione Funzionale Questioni Questioni

Una tupla è utile per memorizzare più valori..Come si nota una tupla è una lista che è immutabile - ad es.una volta creato, non è possibile aggiungere/rimuovere/swap elementi.

Uno dei vantaggi di essere immutabile è che, poiché la tupla di dimensioni fisse, permette che il tempo di esecuzione per eseguire alcune ottimizzazioni.Questo è particolarmente utile quando un tupple è utilizzato nel contesto di un valore di ritorno o di un parametro di una funzione.

Oltre ai luoghi dove sono sintatticamente è necessaria la stringa % funzionamento e per di più i valori di ritorno, io uso tuple come una forma di leggero classi.Per esempio, supponiamo di avere un oggetto che passa fuori un opaco cookie di un chiamante di un metodo che viene poi passato in un altro metodo.Una tupla è un buon modo per comprimere più valori in un cookie senza dover definire una classe separata per le contengono.

Cerco di essere prudente circa questo particolare, però.Se i cookie vengono utilizzati liberamente in tutto il codice, è meglio creare una classe, perché aiuta a documentare il loro uso.Se vengono utilizzate solo in un posto (ad es.un paio di metodi) quindi potrei utilizzare una tupla.In ogni caso, perché è Python si può iniziare con una tupla e poi cambiare a un'istanza di una classe personalizzata, senza dover modificare il codice nella funzione chiamante.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top