O que significam estes operadores(**, ^, %, //)? [fechado]
que não a norma +
, -
, *
e /
operadores; mas o que significa isto? (**
, ^
, %
, //
) ?
>>> 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
e o 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
%
em x%m
devolve um módulo de resto normal, mas só se m < x
, porque é que isso acontece? O que faz?
>>> 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
e o operador? o que faz?
>>> 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
3 answers
-
**
: exponenciação -
^
: exclusivo-ou (bitwise) -
%
: Módulo -
//
: dividir com resultado integral (eliminar o resto)
Você pode encontrar todos esses operadores na referência da linguagem Python , embora você tenha que percorrer um pouco para encontrá-los todos. Como outras respostas disseram:
- o operador
**
faz exponenciação.a ** b
éa
elevado ao poderb
. O mesmo símbolo**
também é usado em argumentos de função e invocações, com um significado diferente (passando e recebendo argumentos de palavras-chave arbitrários). - o operador
^
faz um xor binário.a ^ b
irá devolver um valor com apenas os bits definidos ema
ou emb
, mas não em ambos. Este é simples! - o operador
%
é principalmente para encontrar o módulo de dois inteiros.a % b
devolve o restante após ter divididoa
porb
. Ao contrário dos operadores de módulo em algumas outras linguagens de programação( como C), em Python um módulo terá o mesmo sinal queb
, ao invés do mesmo sinal quea
. O mesmo operador também é usado para o estilo "velho" de formatação de texto, entãoa % b
pode devolve um texto sea
for um texto de formato eb
for um valor (ou uma tupla de valores) que pode ser inserido ema
. - o operador
//
faz a versão do Python da divisão inteira. A divisão inteira de Python não é exatamente a mesma que a divisão inteira oferecida por algumas outras linguagens (como C), uma vez que gira em direção ao infinito negativo, ao invés de em direção ao zero. Juntamente com o operador de módulo, pode dizer-se que sim. No Python 2, a divisão do chão é o comportamento padrão quando você divide dois inteiros (usando o operador de divisão normal/
). Uma vez que isso pode ser inesperado (especialmente quando você não é exigente sobre que tipos de números você recebe como argumentos para uma função), o Python 3 mudou para fazer a divisão "true" (ponto flutuante) a norma para a divisão que seria arredondada de outra forma, e ele fará a divisão "floor" apenas quando explicitamente solicitado. (Você também pode obter o novo comportamento no Python 2 colocandofrom __future__ import division
no topo de seus arquivos. Recomendo vivamente aquilo!)
Está correcto que **
é a função de poder.
^
é bitwise XOR.
%
é realmente a operação de Módulo, mas note que para números positivos, x % m = x
sempre que m > x
. Isto decorre da definição de Módulo. (Adicionalmente, Python especifica x % m
para ter o sinal de m
.)
//
é uma operação de divisão que retorna um inteiro descartando o restante. Este é o formulário padrão de divisão usando o /
na maior parte da programação idioma. No entanto, o Python 3 mudou o comportamento de /
para executar a divisão de ponto flutuante mesmo que os argumentos sejam inteiros . O operador //
foi introduzido em python 2.6 e Python 3 para fornecer um operador de divisão inteira que se comportaria consistentemente entre Python 2 e Python 3. Isto 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 mais detalhes, veja esta pergunta: divisão em Python 2.7. e 3.3