Qué significan estos operadores(**, ^, %, //)? [cerrado]


Distinta de la estándar +, -, *y / operadores; pero, ¿qué significa (** , ^ , %, //) ?

>>> 9+float(2) # addition
11.0
>>> 9-float(2) # subtraction
7.0
>>> 9*float(2) # multiplication
18.0
>>> 9/float(2) # division
4.5
>>>
>>> 9**float(2) # This looks like a square, (i.e. power 2) 
81.0
>>> 9**float(3) # So ** is equivalent to `math.pow(x,p)` ?
729.0

¿Qué tal el operador ^?

>>> 9^int(2) # What is `^` in `x^u` , it only allows `int` for `u`
11
>>> 9^int(3)
10
>>> 9^int(4)
13
>>> 9^int(5)
12
>>> 9^int(6)
15
>>> 9^int(7)
14
>>> 9^int(8)
1
>>> 9^int(9)
0
>>> 9^int(10)
3
>>> 9^int(11)
2
>>> 9^int(12)
5

% in x%m devuelve un módulo de resto normal, pero solo si m < x, ¿por qué es así? ¿Qué hace %?

>>> 9%float(2)
1.0
>>> 9%float(3)
0.0
>>> 9%float(4)
1.0
>>> 9%float(5)
4.0
>>> 9%float(6)
3.0
>>> 9%float(7)
2.0
>>> 9%float(8)
1.0
>>> 9%float(9)
0.0
>>> 9%float(10)
9.0
>>> 9%float(11)
9.0
>>> 9%float(12)
9.0

¿Qué tal el operador //? ¿qué hace?

>>> 9//float(2)
4.0
>>> 9//float(3)
3.0
>>> 9//float(4)
2.0
>>> 9//float(5)
1.0
>>> 9//float(6)
1.0
>>> 9//float(7)
1.0
>>> 9//float(8)
1.0
>>> 9//float(9)
1.0
>>> 9//float(1)
9.0
>>> 9//float(0.5)
18.0
Author: coldspeed, 2013-03-04

3 answers

  • **: exponenciación
  • ^: exclusivo-o (bitwise)
  • %: módulo
  • //: dividir con resultado integral (descartar resto)
 68
Author: John Zwinck,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-03-04 03:07:35

Puedes encontrar todos esos operadores en la referencia del lenguaje Python , aunque tendrás que desplazarte un poco para encontrarlos todos. Como otras respuestas han dicho:

  • El operador ** hace la exponenciación. a ** b es a elevado al poder b. El mismo símbolo ** también se usa en el argumento de función y en llamar notaciones, con un significado diferente (pasar y recibir argumentos de palabras clave arbitrarios).
  • El operador ^ hace un xor binario. a ^ b will devuelve un valor con solo los bits establecidos en a o en b pero no ambos. Este es simple!
  • El operador % es principalmente para encontrar el módulo de dos enteros. a % b devuelve el resto después de dividir a por b. A diferencia de los operadores de módulo en algunos otros lenguajes de programación (como C), en Python un módulo tendrá el mismo signo que b, en lugar del mismo signo que a. El mismo operador también se utiliza para el estilo "antiguo" de formato de cadena, por lo que a % b puede devolver un string if a es una cadena de formato y b es un valor (o tupla de valores) que se puede insertar en a.
  • El operador // hace la versión de Python de la división entera. La división entera de Python no es exactamente la misma que la división entera ofrecida por algunos otros lenguajes (como C), ya que redondea hacia infinito negativo, en lugar de hacia cero. Junto con el operador de módulo, se puede decir que a == (a // b)*b + (a % b). En Python 2, la división de piso es el comportamiento predeterminado cuando dividir dos enteros (usando el operador de división normal /). Dado que esto puede ser inesperado (especialmente cuando no eres exigente con los tipos de números que obtienes como argumentos para una función), Python 3 ha cambiado para hacer que la división "verdadera" (coma flotante) sea la norma para la división que se redondearía de otra manera, y hará la división "piso" solo cuando se solicite explícitamente. (También puede obtener el nuevo comportamiento en Python 2 poniendo from __future__ import division en la parte superior de sus archivos. Recomiendo encarecidamente it!)
 18
Author: Blckknght,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-03-04 14:24:57

Tienes razón en que ** es la función de potencia.

^ es XOR bit a bit.

% es de hecho la operación de módulo, pero tenga en cuenta que para números positivos, x % m = x siempre que m > x. Esto se desprende de la definición de módulo. (Además, Python especifica x % m para tener el signo de m.)

// es una operación de división que devuelve un entero, descartando el resto. Esta es la forma estándar de división que usa / en la mayoría de los lenguajes de programación. Sin embargo, Python 3 cambió el comportamiento de / para realizar la división en coma flotante incluso si los argumentos son enteros. El operador // se introdujo en Python 2.6 y Python 3 para proporcionar un operador de división de enteros que se comportaría consistentemente entre Python 2 y Python 3. Esto significa:

| context                                | `/` behavior   | `//` behavior |
---------------------------------------------------------------------------
| floating-point arguments, Python 2 & 3 | float division | int divison   |
---------------------------------------------------------------------------
| integer arguments, python 2            | int division   | int division  |
---------------------------------------------------------------------------
| integer arguments, python 3            | float division | int division  |

Para más detalles, vea esta pregunta: División en Python 2.7. y 3.3

 3
Author: Kyle Strand,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-11-14 23:39:58