Marco B. wrote:

Inoltre l'operatore % causa dei comportamenti carini come in questo caso
(visto a un talk di Hettinger a Europython):

     >>> "%d" % 3 * 3
    '333'
     >>> "%d" % 3 ** 3
    '27'
     >>> "%d" % 3 % 3
    Traceback (most recent call last):
       File "<stdin>", line 1, in <module>
    TypeError: not all arguments converted during string formatting


Mentre:

     >>> "{0}".format(3 * 3)
    '9'
     >>> "{0}".format(3 ** 3)
    '27'
     >>> "{0}".format(3 % 3)
    '0'


Ora capisco che la cosa possa essere 'sorprendente', ma a me pare una normale applicazione delle regole di precedenza. Se si usano gli operatori o si conoscono tali regole, oppure ci si fa male.

Pero' a questo punto bisognerebbe toglierli tutti, perche' sono tutti potenzialmente pericolosi, a partire da ** che associa a *destra*

In [42]: 2 ** 3 ** 2
Out[42]: 512

In [43]: 2 ** (3 ** 2)
Out[43]: 512

In [44]: (2 ** 3) ** 2
Out[44]: 64

Questa e' essenzialmente la posizione di Java. E hanno in un certo senso anche ragione, figuriamoci. Nei linguaggi ad oggetti, specie in quelli dinamici o con buoni livelli di dinamismo gli operatori, per quanto comodi da usare, sono piuttosto complessi da scrivere (bene).



Quello che rimane e' il fatto che abbiano deciso di deprecare %, il che vuole dire che effettivamente e' una buona idea non usarlo nel codice nuovo.

Avranno avuto i loro buoni motivi, per carita'. Io non sento il bisogno dell'ennesimo linguaggio di interpolazione di stringhe... stare con quello di C mi andava benone. Mi incasino a sufficienza con quello di Erlang, common lisp, Prolog, etc etc etc.

E tanto per cambiare sento sempre meno il bisogno di passare a Python 3. Speriamo che per quando il 2 sara' da mollare ci sara' un buon linguaggio alternativo.



--
.
..: -enrico-

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

Rispondere a