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