web-dev-qa-db-fra.com

Deux barres obliques dans Python

Je suis tombé sur cet échantillon de code d'un tri radix :

def getDigit(num, base, digit_num):
    # pulls the selected digit
    return (num // base ** digit_num) % base

Que fait le '// 'faire en Python?

39
Biff

// Est l'opérateur de division de plancher. Il produit le plancher du quotient de ses opérandes, sans arrondi flottant pour les opérandes entiers. Ceci est également parfois appelé division entière, même si vous pouvez l'utiliser avec des flottants, car la division des entiers avec / Le faisait par défaut.

Dans Python 3, l'opérateur de division / Ordinaire renvoie des valeurs à virgule flottante même si les deux opérandes sont des nombres entiers, donc un opérateur différent est nécessaire pour la division du sol. Ceci est différent de Python 2 où / A effectué une division au sol si les deux opérandes étaient des entiers et une division à virgule flottante si au moins l'un des opérandes était une valeur à virgule flottante.

L'opérateur // A été introduit pour la compatibilité ascendante dans Python 2.2 lorsqu'il a été décidé que Python 3 devrait avoir cette nouvelle capacité. Associé à la possibilité d'activer le comportement Python 3 via from __future__ import division (Également introduit dans Python 2.2), cela vous permet d'écrire Python 3 -code compatible dans Python 2.

51
sepp2k

Vous pouvez simplement l'essayer:

In []: 5/2
Out[]: 2

In []: 5.0/2
Out[]: 2.5

In []: 5.0//2
Out[]: 2.0

Cela devrait être explicite.

(C'est dans Python 2.7.)

4
LWZ