[Python] Glitch

Simone Federici s.federici a gmail.com
Sab 5 Gen 2013 20:13:58 CET


a naso avrei detto che questo avrebbe dato lo stesso problema

>>> T = ([],)
>>> T[0].__iadd__([3])
[3]

>>> T = ([],)
>>> T[0] += [3]
Traceback (most recent call last):
  File "<ipython-input-62-a940dfebc38f>", line 1, in <module>
    T[0] += [3]
TypeError: 'tuple' object does not support item assignment


http://docs.python.org/2/reference/datamodel.html?highlight=iadd#object.__iadd__


>>> T = ([],)
>>> T[0] = T[0].__iadd__([3])
Traceback (most recent call last):
  File "<ipython-input-65-d9efb2b8bc4b>", line 1, in <module>
    T[0] = T[0].__iadd__([3])
TypeError: 'tuple' object does not support item assignment

>>> T
([3],)

ma dalla ducumentazione si capisce che
object.__iadd__ dovrebbe/*potrebbe* ritornare self o un altro oggetto

il che lascia fuori l'assegnamento,
potremmo dire che l'assegmanento è decisamente inutile se l'oggetto ha una
implementazione dell'__iadd__ che ritorna self, ma anche no.

in conclusione è veramente brutto e allo stesso tempo meraviglioso

2013/1/4 Davide Alberani <da a mimante.net>

> 2013/1/4 Marco Beri <marcoberi a gmail.com>:
> >
> > Chi indovina cosa stampa l'ultima riga di questo snippet senza
> eseguirlo? Si
> > accettano tentativi :-)
>
> Non è un glitch.  Prima estende la lista,
> poi fa un assegnamento ad un elemento
> di una tupla.  Garantito che te lo prendi
> nei denti... ma intanto l'estensione alla
> lista (tipo mutabile) l'ha fatta. :-)
>
> Da cui, se ne evince che il metodo extend
> delle liste in fondo in fondo non sta lì per
> bellezza. ;-)
>
> Poi ovvio che è un comportamento un poco
> inaspettato... io ci ho sbattuto contro qualche
> anno fa, e fu divertente.  Sì, divertente, diciamo.
>
>
> --
> Davide Alberani <da a mimante.net>  [PGP KeyID: 0x465BFD47]
> http://www.mimante.net/
> _______________________________________________
> Python mailing list
> Python a lists.python.it
> http://lists.python.it/mailman/listinfo/python
>
-------------- parte successiva --------------
Un allegato HTML è stato rimosso...
URL: <http://lists.python.it/pipermail/python/attachments/20130105/67e608ac/attachment.html>


Maggiori informazioni sulla lista Python