En Python, ¿por qué un número negativo elevado a una potencia par permanece negativo?

En python

>>> i = 3 >>> -i**4 -81 

¿Por qué no se evalúa -i**4 como (-i)**4 , sino como -(i**4) ?

Supongo que uno podría argumentar que elevar a un poder tiene prioridad sobre la multiplicación (implícita) de i con menos uno (es decir, debe leer -1*i**4 ). Pero donde aprendí matemáticas, -i**n con n par y i positivo, debería salir positivo.

El operador ** enlaza más fuertemente que el operador - en Python. Si desea anular eso, usaría paréntesis, por ejemplo, (-i)**4 .

https://docs.python.org/2/reference/expressions.html#operator-precedence https://docs.python.org/3/reference/expressions.html#operator-precedence

El operador de energía ( ** ) tiene una prioridad más alta que el operador de negación unaria ( - ). -i**4 se evalúa como -(i**4) – es decir, toma 3 hasta la potencia de cuatro, que es 81, y luego lo niega, lo que resulta en -81 .

Puedes usar la función pow () de math.

 import math i = 3 math.pow(-i,4) 

Esto dará un valor positivo.

Como se indica aquí: Exponenciales en python x. ** y vs math.pow (x, y) , esta opción (o simplemente comstackr en pow ()) sería ideal si desea producir siempre un flotador.

Tienes que hacer (-i) ** 4 para obtener un resultado positivo.

Los * ‘s tienen mayor prioridad que el’ – ‘.

En caso de duda, utilizar paréntesis. (O, como lo sugirió Amber, consulte la documentación del idioma)