2010-03-04 33 views
5

Estaba jugando con la línea de comando de python y el operador **, que hasta donde sé realiza una función de potencia. Entonces 2 ** 3 debería ser (y es) 8 porque 2 * 2 * 2 = 8.¿Cuál es la asociatividad del operador de Python **?

¿Alguien puede explicar el comportamiento que encontré? No veo ninguna forma de agrupar las operaciones con paréntesis para obtener un resultado de 65536 como se logró aquí.

>>> 2 ** 2 ** 2 
16 
>>> 2 ** 2 ** 2 ** 2 
65536 
>>> (2 ** 2 ** 2) ** 2 
256 
+1

Esto está bien documentado y es fácil de entender. ¿Por qué publicaste una pregunta por algo que está en la documentación? –

Respuesta

5
2** (2**(2**2)) 

de http://docs.python.org/reference/expressions.html

operadores en el mismo grupo de cuadro de izquierda a derecha (excepto para las comparaciones, incluyendo las pruebas, que todos tienen la misma prioridad y la cadena de izquierda a derecha - ver comparaciones de sección - y exponenciación, que agrupa de derecha a izquierda).

0

también:

2 ** (2 ** 2 **2) 

De un modo u otro, se convierte en 2 ** 16

0

El operador ** es asociativa derecha:

2 ** (2 ** (2 ** 2)) = 2 ** (2 ** 4) = 2 ** 16 = 65536

4

O bien se asocia a la izquierda o la derecha. Para descubrir la respuesta usted mismo, haga el experimento.

>>> 3 ** 3 ** 3 
7625597484987 
>>> (3 ** 3) ** 3 
19683 
>>> 3 ** (3 ** 3) 
7625597484987 

Por lo tanto, se asocia a la derecha.

O puede leer los documentos. Google: "poder pitón" y el primer resultado es http://www.python.org/doc/2.5.2/ref/power.html

La segunda frase es:

Así, en una secuencia de unparenthesized de poder y operadores unitarios, los operadores se evalúan de derecha a left (esto no limita el orden de evaluación para los operandos).

Confirmando los resultados experimentales.

Cuestiones relacionadas