[Python-es] Python 3.5.2

Daπid davidmenhur en gmail.com
Sab Dic 24 14:35:08 EST 2016


2016-12-24 17:52 GMT+01:00 Johnny Alonso <johnny.alonso.quintero en gmail.com>:
> Aquí los resultados con el operador ** coinciden, -4 en ambos casos, y lo
> acepto como correcto desde el punto de vista del lenguaje, pero no desde el
> punto de vista matemático, pues matemáticamente las expresión -2² es
> diferente a -(2²).

La convención usual en libros de matemáticas superiores es que -2^2
(léase menos dos al cuadrado) es -4. Es decir, -x^2 = -(x^2)

Por desgracia, los libros elementales no siguen siempre la misma
convención, y tarde o temprano acaba causando confusión. Por ejemplo,
la función x^2 (equis cuadrado) es convexa según casi cualquier libro
avanzado, pero la mitad de los libros básicos la consideran cóncava. Y
me sé tres definiciones diferentes de la transformada de Fourier,
según si mires un libro de física teórica, óptica o ingeniería (seis
si cuentas cuál es la directa y cuál es la inversa); y siempre hay que
mirar cuál están usando exactamente.

> Conjetura: Python no implementa el operador menos unario, pero si el binario
> el cual tiene menor precedencia que el de potenciación, así:
>
> -x**n es interpretado en Python como 0-x**n.

Sí que la implementa.

dis.dis(lambda x:-x**2)
  1           0 LOAD_FAST                0 (x)
              3 LOAD_CONST               1 (2)
              6 BINARY_POWER
              7 UNARY_NEGATIVE
              8 RETURN_VALUE


Si quieres negar tu propia clase, tienes que implementar el método __neg__(self)


/David.


Más información sobre la lista de distribución Python-es