[Python] Chiavi di un dizionario (Era: super(MyClass, self).__init__(*args, **kwargs))
Dario Santomarco
dario.santomarco a gmail.com
Mer 17 Feb 2016 23:19:36 CET
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 a 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
-------------- parte successiva --------------
Un allegato HTML è stato rimosso...
URL: <http://lists.python.it/pipermail/python/attachments/20160217/b76feacc/attachment.html>
Maggiori informazioni sulla lista
Python