Date un'occhiata al Python tutorial on tuples:
Un problema particolare è la costruzione di tuple contenenti 0 o 1 articoli: la sintassi fornisce alcuni sotterfugi per per accogliere questi. Le tuple vuote sono costruite da una coppia vuota di parentesi; una tupla con un elemento è costruita seguendo un valore con una virgola (non è sufficiente racchiudere un singolo valore tra parentesi). Brutto, ma efficace. Per esempio:
>>> empty =()
>>> singleton = 'hello', # <-- note trailing comma
>>> len(empty)
0
>>> len(singleton)
1
>>> singleton
('hello',)
Se si mette solo un paio di parentesi intorno al vostro oggetto stringa, che si trasformerà solo che l'espressione in un parenthesized expression (enfasi aggiunta):
Un'espressione tra parentesi lista rendimenti qualunque cosa la lista di espressioni produce: se la lista contiene almeno una virgola, produce una tupla; in caso contrario, restituisce la singola espressione che costituisce l'elenco di espressioni.
Una coppia di parentesi vuota restituisce un oggetto tupla vuoto. Poiché le tuple sono immutabili, si applicano le regole per i letterali (cioè, due occorrenze della tupla vuota possono o meno produrre lo stesso oggetto).
Si noti che le tuple non sono formate dalle parentesi, ma piuttosto dall'operatore di virgola. L'eccezione è la tupla vuota, per la quale sono richieste le parentesi - consentendo che il "nulla" non convertito nelle espressioni causi ambiguità e permetta il passaggio di errori di battitura comuni.
Che è (ammesso Python 2.7),
a = 'Quattro TT'
print tuple(a) # <-- you create a tuple from a sequence
# (which is a string)
print tuple([a]) # <-- you create a tuple from a sequence
# (which is a list containing a string)
print tuple(list(a)) # <-- you create a tuple from a sequence
# (which you create from a string)
print (a,) # <-- you create a tuple containing the string
print (a) # <-- it's just the string wrapped in parentheses
L'uscita è come previsto:
('Q', 'u', 'a', 't', 't', 'r', 'o', ' ', 'T', 'T')
('Quattro TT',)
('Q', 'u', 'a', 't', 't', 'r', 'o', ' ', 'T', 'T')
('Quattro TT',)
Quattro TT
Per aggiungere alcune note sulla dichiarazione di stampa. Quando si tenta di creare una tupla a elemento singolo come parte di una istruzione print in Python 2.7 (come in print (a,)
) è necessario utilizzare il modulo tra parentesi, perché la virgola finale di print a,
sarebbe altrimenti considerata parte dell'istruzione di stampa e quindi causa la nuova riga da sopprimere dall'output e non una tupla creata:
Un carattere '\ n' viene scritto alla fine, a meno che l'istruzione di stampa termini con una virgola.
In Python 3.x maggior parte degli usi di cui sopra negli esempi sarebbero effettivamente aumentare SyntaxError
, perché in Python 3 print
turns into a function (è necessario aggiungere un altro paio di parentesi). Ma soprattutto questo può causare confusione:
print (a,) # <-- this prints a tuple containing `a` in Python 2.x
# but only `a` in Python 3.x
L'output previsto dovrebbe essere '('Quattro TT',)'; nota: la virgola. – jfs
La stringa non viene convertita in una tupla, è contenuta in una tupla, quindi. – moooeeeep
@ J.F.Sebastian Questo fa qualche differenza? Qual è la differenza btw ('Quattro TT',) e ('Quattro TT')? – Shankar