Il 17/02/2016 23.00, Marco Giusti ha scritto:
On Wed, Feb 17 2016, Dario Santomarco wrote:
Ciao, ci sono i seguenti errori:
     Tua - kwargs = {1:"A", 2:"B", 3:"C"}
     Corretta - kwargs = {'1':"A", '2':"B", '3':"C"} # le chiavi del
dizionario DEVONO essere stringhe
Spiacente di contraddirti ma:

     $ python
     Python 2.7.9 (default, Mar  1 2015, 12:57:24)
     [GCC 4.9.2] on linux2
     Type "help", "copyright", "credits" or "license" for more information.
     >>> {1: "1"}[1]
     '1'
     >>> {(1,2): "una tupla"}
     {(1, 2): 'una tupla'}
     >>> {[1,2]: "una lista"}
     Traceback (most recent call last):
       File "<stdin>", line 1, in <module>
     TypeError: unhashable type: 'list'
     >>> {object(): "un oggetto"}
     {<object object at 0x7fd9eb1ed080>: 'un oggetto'}
     >>>

come puoi vedere le chiavi di un dizionario possono essere tante cose,
e l'errore con la lista ti dà un indizio su cosa può e non può essere
una chiave di dizionario.

m.
_______________________________________________
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python

Ciao, non mi riferivo ai dizionari in generale, ma solo a quelli passati come **kwargs. **kwargs equivale ad una sequenza di keyword=valore, ciò comporta che le chiavi possonano essere passate solo come stringa poiché equivalgono alle etichette dei rispettivi valori, es: - def foo(1="A", 5="B") è un errore di sintassi così come lo è una semplice assegnazione 1 = valore (1 è un letterale di tipo int, pertanto non può essere un'etichetta)
- def foo(A = 1, B=5) è corretto perché A e B possono essere etichette.
Per scrupolo lo avevo testato sulla mia installazione, uso la 3.4.4, se non gli passo stringhe solleva una TypeError: __init__() keywords must be strings.

--

Dario Santomarco


_______________________________________________
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python

Rispondere a