Je suis tombé sur un code:

dz3 = 1./m * (a3 - Y)

Pourquoi 1. est-il utilisé ici au lieu de simplement 1?

Les deux semblent équivalents:

>>> 1 / 4
0.25
>>> 1. / 4
0.25

Y a-t-il des cas où ils ne sont pas équivalents?

2
Tom Hale 15 avril 2018 à 10:54

3 réponses

Meilleure réponse

En Python2

>>> 3/2 # returns 1

Alors qu'en Python3

>>> 3/2 # returns 1.5

Comme vous pouvez le voir, on fait une division entière et l'autre fait une division flottante.

Si je devais écrire

>>> 3./2 # returns 1.5

Il effectue une division flottante quelle que soit la version Python que je choisis. Parce que float / integer ne peut donner lieu qu'à float.

Aussi pour faire une division entière en Python 3, vous écrivez simplement

>>> 3//2

Voir pour plus d'informations

2
Tom Hale 15 avril 2018 à 08:21

Ok donc les réponses précédentes ne sont pas totalement complètes. La principale différence entre le 1 et le 1. réside dans leur type et le type du résultat de toute équation qui comprend un nombre flottant en python sera flottant.

Cela inclut les exposants de multiplication par soustraction d'addition et même la division entière comme si un opérande est float, la réponse sera de type float.

De plus, comme d'autres l'ont mentionné, il est là principalement pour la compatibilité avec python2, mais sachez que dans cette expression, si le nombre est flottant, le résultat sera toujours flottant.

..# 1. / 4
   0.25
..# 1 / 4
   0.25
..# type(1.)
   <class 'float'>
..# type(1)
   <class 'int'>
..# 1 // 4
   0
..# 1. // 4
   0.0
..# type(1. // 4)
   <class 'float'>
..# type(1 // 4)
   <class 'int'>

J'ai changé l'interpréteur >>> en .. # comme l'éditeur de pile le montre sur plusieurs lignes comme niveau de devis.

Donc, fondamentalement, si vous voulez vous assurer que l'extrait de code aura toujours une valeur flottante, vous faites flotter l'un des nombres.

1
MarkoShiva 15 avril 2018 à 08:25

Ce genre de chose serait utilisé pour la compatibilité Python 2, où la division avec deux opérandes int était une division entière par défaut. 1. est un float au lieu d'un int, donc entraînera une division flottante quelle que soit la version Python et si m est un int.

6
Ry- 15 avril 2018 à 07:55