[Python-es] Python 3.5.2

Miguel Manzano mmanzano en gmail.com
Dom Dic 25 01:55:26 EST 2016


Ricardo y David. Nunca pensé que iba a disfrutar tanto de una conversación
sobre precedencia de operadores. ;P

Saludos.

El 25/12/2016 7:15, "Ricardo Cárdenes" <ricardo.cardenes en gmail.com>
escribió:

> Añado, al respecto de calculadoras: en una normal, *donde no se pueden
> introducir expresiones aritméticas*, sino que lo que hay en pantalla se
> toma siempre como un operando completo, hubiese esperado lo contrario, ya
> que estoy solicitando explícitamente elevar al cuadrado el número -2 y
> entonces no hay ningún tipo de duda de que el resultado será "4" y no "-4"
>
> 2016-12-24 20:05 GMT-10:00 Ricardo Cárdenes <ricardo.cardenes en gmail.com>:
>
>> Mire señor Alonso, yo no le he respondido a la ligera.
>>
>> Primero, como le dije, el caso de Python no es una excepción, sino *la
>> regla* en cuanto a lenguajes de programación *que implementan la
>> exponenciación* en su sintaxis - es decir, la precedencia está dictada por
>> el propio lenguaje. Es decir, no lo busque en C, o en C++, o en Java, etc.
>> De hecho, me molesté en documentarme brevemente antes de responder. Y mira
>> que no hay muchos lenguajes que implementen la exponenciación en su
>> sintaxise, pero le dejo una lista (no exhaustiva), sin irme a casos
>> demasiado exóticos:
>>
>>   - ADA: los operadores de MAYOR precedencia son abs (valor absoluto),
>> not (negación lógica) y ** (exponenciación). Dos niveles por encima de los
>> operadores unarios, y uno por encima de la multiplicación/división.
>>   - D: El operador ^^ (exponenciación) está un nivel por encima de los
>> unarios
>>   - FORTRAN: El operador ** tiene la precedencia más alta
>>   - Haskell: Los operadores ^, ^^ y ** (todos de exponenciación) están
>> por debajo sólo de "!!", que se usa para acceder a los índices de arrays
>>   - PHP: ** está por encima de todos los demás operadores aritméticos (y
>> mira que le tengo tirria a este lenguaje, pero por una vez...)
>>   - Python (pero esto ya lo sabíamos): ** está, como viene siendo
>> habitual, por encima de los unarios, pero por debajo de los operadores de
>> indización
>>   - R: ^ (exponenciación), está justo por encima de + y - unarios
>>   - Ruby: ** está justo por encima del - unario (pero justo por debajo
>> del + unario, cosas de la vida)
>>
>> Casos que conozco donde la precedencia de los unarios está por encima:
>> Prolog, JavaScript y algunos casos patológicos como Excel (véase más abajo).
>>
>> En cuanto a calculadoras, he usado la que tengo más a mano (en mi
>> teléfono móvil) y:
>>
>>    -4^2 = -16
>>    (-4)^2 = 16
>>
>> tal como esperaba.
>>
>> Y en el caso de las matemáticas, don Aurelio Baldor (al que no conocía,
>> por cierto) podrá cantar misa en Latín, pero cualquier de mis profesores de
>> matemáticas me hubiera tirado de las orejas si se ocurre interpretar que:
>>
>>     -x^n = (-x)^n
>>
>> Aunque claro, siempre me animaron a usar paréntesis para que no cupiera
>> duda.
>>
>> Si es cuestión de sacar referencias, pues nada. Citemos Wikipedia, que a
>> su vez usa como referencias "Elementary Algebra for College Students"
>> (Angel Allen) y "Taschebuch der Mathematik" (Grosche, Ziegler y Ziegler):
>>
>> There exist differing conventions concerning the unary operator −
>> (usually read "minus"). *In written or printed mathematics*, the
>> expression −32 is interpreted to mean 0 − (32) = −9, but in some
>> applications and programming languages, notably Microsoft Office Excel (and
>> other spreadsheet applications) and the programming language bc [...]
>>
>>
>> Las negritas son mías, pero vamos, que la norma la que decimos nosotros,
>> aunque algunos lenguajes de programación han escogido usar la convención
>> contraria. Y Baldor, según vd., aunque la única copia a la que tenido
>> acceso es una edición de 1985-86, en la que el capítulo XV no empieza hasta
>> la página 155 y no aparece un sólo número negativo.
>>
>> Saludos,
>> Ricardo
>>
>> 2016-12-24 6:52 GMT-10:00 Johnny Alonso <johnny.alonso.quintero en gmail.com
>> >:
>>
>>> Hola Ricardo y Armando, si las expresiones que muestran son código
>>> Python, lamento decirles que están bastante lejos de la realidad.
>>>
>>> Están comparando expresiones con operadores diferentes y que el
>>> resultado en ocasiones les coincida es mera casualidad.
>>> En Python el operador ** es potenciación y ^ equivale a la operación XOR
>>> entre bist.
>>> >>> -2**2
>>> -4
>>> >>> -(2^2)
>>> 0
>>> Armando ni siquiera coinciden los resultados, dándote el beneficio de la
>>> duda, y utilizas el ^ como operador de potenciación, entonces:
>>> La expresión -(2^2) en Python equivale a:
>>> >>> -(2**2)
>>> -4
>>> 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²).
>>>
>>> Los desarrolladores de lenguajes son libres de incorporar lo que desean,
>>> esto también aplica para la precedencia de operadores y el sentido de
>>> evaluación de las expresiones matemáticas, pero de igual forma lo
>>> documentan para que los usuarios no incurramos en errores asumiendo que
>>> todos cumplen las reglas de evaluación matemática al pie de la letra.
>>>
>>>
>>>
>>> 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.
>>>
>>> >>> -2**2
>>>
>>> -4
>>>
>>> >>> 0 - 2**2
>>>
>>> -4
>>>
>>>
>>>
>>> Saludos, Johnny Alonso
>>>
>>>
>>>
>>>
>>>
>>> *De:* Python-es [mailto:python-es-bounces+johnny.alonso.quintero=
>>> gmail.com en python.org] *En nombre de *Armando Ortega
>>> *Enviado el:* sábado, 24 de diciembre de 2016 6:24 a. m.
>>>
>>> *Para:* La lista de python en castellano
>>> *Asunto:* Re: [Python-es] Python 3.5.2
>>>
>>>
>>>
>>> Buenos días.
>>>
>>> Ricardo tiene razón.
>>>
>>> -2**2 = -(2^2) = -4
>>> (-2)**2 = -2^2 = 4
>>>
>>> Un saludo.
>>>
>>> El 24/12/16 a las 04:54, Johnny Alonso escribió:
>>>
>>> Hola Ricardo, Por definición “La potencia es resultado de tomar un
>>> número como factor 2 o más veces”. Aritmética de Baldor, capítulo XV,
>>> Elevación a potencias y sus operaciones inversas, página 152.
>>>
>>>
>>>
>>> -2**2 = -2 * -2
>>>
>>>
>>>
>>> Leyes de la potenciación:
>>>
>>> Todo número elevado a la cero  es igual a 1, x**0 = 1
>>>
>>> -2**0 = 1
>>>
>>>
>>>
>>> Todo número elevado a un exponente par (múltiplo de 2) es positivo, en
>>> caso contrario se mantiene el signo del número.
>>>
>>> -2**2 = 4
>>>
>>> -2**3 = -8
>>>
>>>
>>>
>>> Lo anterior lo puedes verificar en la calculadora de un celular IPhone o
>>> Samsung, incluso en la de Windows.
>>>
>>>
>>>
>>> Es evidente que en Python es así, y lo acepto porque así está
>>> documentado, pero es algo para tener en cuenta cuando programas en él.
>>>
>>>
>>>
>>> Ricardo, con respecto a las matemáticas en este caso, estas equivocado.
>>>
>>>
>>>
>>> Saludos, Johnny Alonso
>>>
>>> *De:* Python-es [mailto:python-es-bounces+john
>>> ny.alonso.quintero=gmail.com en python.org
>>> <python-es-bounces+johnny.alonso.quintero=gmail.com en python.org>] *En
>>> nombre de *Ricardo Cárdenes
>>> *Enviado el:* viernes, 23 de diciembre de 2016 5:04 p. m.
>>> *Para:* La lista de python en castellano
>>> *Asunto:* Re: [Python-es] Python 3.5.2
>>>
>>>
>>>
>>> No, no es una excepción.
>>>
>>>
>>>
>>> En matemáticas, la exponenciación tiene prioridad:
>>>
>>>
>>>
>>>   -x^2 = -(x^2)
>>>
>>>
>>>
>>> Los lenguajes de programación que implementan este operador, suelen
>>> adherirse a la regla (Python, PHP, D, Ruby, ...). Luego tienes disidentes
>>> como JavaScript, pero bueno...
>>>
>>>
>>>
>>> Así que no, Python no es "una excepción a las reglas algebraicas".
>>>
>>>
>>>
>>> Saludos,
>>>
>>> Ricardo
>>>
>>>
>>>
>>> 2016-12-23 5:31 GMT-10:00 Johnny Alonso <johnny.alonso.quintero en gmail.
>>> com>:
>>>
>>> Gracias Kiko, me queda claro, es excepción a las reglas algebraicas en
>>> Python.
>>>
>>>
>>>
>>> *De:* Python-es [mailto:python-es-bounces+johnny.alonso.quintero=
>>> gmail.com en python.org] *En nombre de *Kiko
>>> *Enviado el:* viernes, 23 de diciembre de 2016 10:08 a. m.
>>> *Para:* La lista de python en castellano
>>> *Asunto:* Re: [Python-es] Python 3.5.2
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>> El 23 de diciembre de 2016, 16:05, Kiko <kikocorreoso en gmail.com>
>>> escribió:
>>>
>>>
>>>
>>>
>>>
>>> El 23 de diciembre de 2016, 15:06, Johnny Alonso <
>>> johnny.alonso.quintero en gmail.com> escribió:
>>>
>>> Hola todos, estoy iniciándome en Python y creo que se presenta un fallo
>>> de precedencia con el operador menos unario:
>>>
>>> >>> -2**2  # probable error
>>>
>>> -4
>>>
>>> >>> -2 * -2  # Ok
>>>
>>> 4
>>>
>>> >>> pow(-2, 2)  # Ok
>>>
>>> 4
>>>
>>> >>>
>>>
>>> Por favor, si alguien sabe si esto está documentado podría indicarme en
>>> donde lo encuentro, de lo contrario, podrían reportarlo a la fundación, yo
>>> no lo se hacer.
>>>
>>>
>>>
>>>
>>>
>>> Se evalúa antes el operador potencia: https://docs.python.org/3/refe
>>> rence/expressions.html#unary-arithmetic-and-bitwise-operations
>>>
>>> Antes he ido muy rápido: https://docs.python.org/3/refe
>>> rence/expressions.html#the-power-operator
>>>
>>>
>>>
>>>
>>>
>>>
>>> Saludos, JohnnyAlonso
>>>
>>>
>>> _______________________________________________
>>> Python-es mailing list
>>> Python-es en python.org
>>> https://mail.python.org/mailman/listinfo/python-es
>>>
>>>
>>>
>>>
>>>
>>>
>>> _______________________________________________
>>> Python-es mailing list
>>> Python-es en python.org
>>> https://mail.python.org/mailman/listinfo/python-es
>>>
>>>
>>>
>>>
>>>
>>>
>>> _______________________________________________
>>>
>>> Python-es mailing list
>>>
>>> Python-es en python.org
>>>
>>> https://mail.python.org/mailman/listinfo/python-es
>>>
>>>
>>>
>>> _______________________________________________
>>> Python-es mailing list
>>> Python-es en python.org
>>> https://mail.python.org/mailman/listinfo/python-es
>>>
>>>
>>
>
> _______________________________________________
> Python-es mailing list
> Python-es en python.org
> https://mail.python.org/mailman/listinfo/python-es
>
>
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://mail.python.org/pipermail/python-es/attachments/20161225/f2fc906f/attachment.html>


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