Forum Clubic

En python, que signifie 2./float(width) ?

Bonjour,

Tout est dans le titre, devant la difficulté de Google de comprendre cette requête, je m’adresse à vous! Je ne comprends pas ce que signifie un nombre suivi d’un point suivi d’un slash en python…

Merci d’avance

Tel que ça se présente, je dirais que c’est l’équivalent C de ça :

int width = …;
2/(float) width

=> ça force une division en nombre flottant quand tu as un entier. Sinon, si tu fais ça, tu obtiendrais le résultat suivant : 2/100 => 0 au lieu de 0.02.

dac merci beaucoup!

Si on est toujours dans l’équivalent C

“2.” précise que ta constante est flottant double “2” serait entier donc 2./float(width) est un peu redondant … En général “double / int => double”

Petite aide pour la dépatouille en Python.

Pour float(x), l’explication est ici : docs.python.org…

Pour 2. c’est simple, sous un terminal il suffit d’essayer :

$python
>>>type(2)
>>>type(2.)

Ensuite, tu peux t’amuser à faire ces essais :

>>>2/3
>>>2./3
>>>2/float(3)

Enfin, pour répondre à acidbao au sujet de la redondance, essaye

>>>type("3")
>>>2./"3"
>>>2./float("3")

:stuck_out_tongue:
Edité le 23/03/2014 à 00:04


Edité le 07/07/2014 à 16:16

Juste une précision concernant les divisions, depuis la version 3 Python utilise operator.truediv(a, b) pour l’opérateur “/”, quelque soit le type passé.
Python 2 lui utilise operator.div(a, b).

Python 3:


import operator
operator.truediv(2,3) == 2/3
True
2/3
0.6666666666666666

Python 2:


import operator
operator.truediv(2,3) == 2/3
False
2/3
0
2/3.
0.6666666666666666

Sous python 2 il faudra donc penser à forcer le diviseur en flottant.
Pour s’assurer de faire une opération entière il vaut mieux utiliser la syntaxe “//”

17//8 retournera 2
17//8. retournera 2.

Pour terminer, il est possible de forcer l’opérateur truediv sur Python 2 en utilisant :


2/3
0
from __future__ import division
2/3
0.6666666666666666

Fini donc la corvée de parsing !

Plus d’info: https://docs.python.org/2/library/future.html?highlight=import%20division

Hello,

Désolé du délais, je n’avais pas vu la mise à jour.

Pas de mal, je l’avais bien vu. Mais quand au choix des noms et de la possibilité que ce soit un String, ne pas oublier que Python est un langage dynamique. En d’autres termes, ce n’est pas parce que tu écrit une fonction calculate(width) que l’appel passera systématiquement un entier. Ça peut être un choix pour éviter de faire des casts à tout va. Je ne dis pas que c’est le choix qui a dût être fait dans ce cas-ci, j’en sais rien, une seule ligne comme ça sortie du contexte, ça se trouve tu a raison, c’est purement redondant. Mais l’aspect dynamique n’est pas à oublier.

YCL1, tu passe à un autre niveau là :wink: