2015-08-21 27 views
5

Qualche tempo fa pensavo che il costruttore della tupla fosse una coppia di parentesi ().Perché le parentesi sono necessarie nelle tuple?

Esempio:

>>> (1,) 
(1,) 
>>> type((1,)) 
<type 'tuple'> 
>>> t = (1,) 
>>> type(t) 
<type 'tuple'> 

Ma ora so che è la virgola ,.

Quindi, fare lo stesso come sopra:

>>> 1, 
(1,) 
>>> type(1,) 
<type 'int'> # Why? 
>>> 1,2,3 
(1,2,3) 

Ma se faccio:

>>> type(1,2,3) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
TypeError: type() argument 1 must be string, not int 

Questo ha senso per me, ma:

>>> t = 1,2,3 
>>> type(t) 
<type 'tuple'> 

E infine:

>>> type((1,2,3)) 
<type 'tuple'> 

Ecco la domanda: perché sono necessarie le parentesi nel caso finale se la tupla è solo 1,2,3?

+2

tipo (1,2,3) può confondere python perché ',' sono utilizzati per separare i parametri. Quindi può pensare che 1 sia il primo parametro, 2 è il secondo e così via. – NendoTaka

+1

https://stackoverflow.com/questions/16017811/when-are-parenthes-required-around-a-tuple – chishaku

+1

Che dire di 'type (())'? Questo restituisce 'tupla'. –

risposta

1

Perché a volte senza le parentesi l'espressione sarebbe ambigua: senza di loro, si sta effettuando una chiamata di funzione con tre argomenti. Poiché alcune funzioni richiedono tre argomenti, è necessaria una rappresentazione diversa per esprimere un singolo argomento di tupla a tre elementi. In questo caso, è possibile chiamare type() con uno o tre argomenti. In quest'ultimo caso il primo argomento deve essere un nome di classe, quindi si lamenta quando vede un numero intero.

4

In alcuni contesti, le virgole hanno un altro significato: per esempio, all'interno delle parentesi di una chiamata di funzione, separano i parametri. Mettere una serie di parentesi attorno alla tupla garantisce che si trovi in ​​un contesto di espressione semplice, in cui le virgole vengono interpretate come separatori di elementi tupla.

3

direi che t è (1,2,3):

>>> t = 1,2,3 
>>> t 
(1, 2, 3) 
>>> type(t) 
<class 'tuple'> 

E questo t = 1,2,3 è zucchero sintattico per la versione esplicitamente tra parentesi, una forma di zucchero che è particolarmente piacevole per tuple- disimballaggio.

1

Si chiama type con tre ints, che non corrisponde agli argomenti previsti per un'implementazione sovraccaricata.

+0

Quella causa ha un senso. – Gocht

1

Perché senza la parentesi, la funzione integrata type() interpreterà che vengono forniti tre parametri anziché uno.

Secondo python official documentation, tipo() maggio accetta uno o tre parametri:

  • tipo (oggetto)
  • tipo (nome, basi, dict)

E con parentesi che fornisci solo un parametro, un oggetto tupla, che non causerà un errore.

Problemi correlati