Python wtf geek, python | 27nov08
Il arrive quelque fois qu’un codeur passe des heures à se tirer les cheveux sur un bug farfelue bien caché, voir introuvable. Lorsqu’il s’agit d’un bug d’implémentation propre au langage et que l’on s’en rend compte après une heure à tripatouiller les lignes de code une par une, un certain sentiment de haine se met en place et des envies de meurtre surgissent du plus profond de soi.
Les gens proches de moi connaissent mon amour grandissant du Python (fabuleux langage, soit-dit en passant). Il n’est pourtant pas sans défaut. Si quelqu’un pouvait m’apporter sur un plateau d’argent la tête de la personne responsable du typage dynamique du langage en question, je lui en serais reconnaissant. En effet, le typage faible a pour vocation première de ne pas prendre la tête du développeur et de gérer lui-même les casts (bien que je sois partisan du typage statique, j’aime bien avoir le contrôle complet de mon code). Et pourtant, en Python, cela foire dans certains cas.
Petite démonstration, voulez-vous ?
~: python Python 2.5.2 [...] >>> import math >>> 3/4 * math.pi 0.0
Ah, tiens, grande nouvelle ! Depuis quand trois quarts de π est égal à 0 ? Un doute commence à germer dans mon esprit… Testons le même calcul différemment :
>>> 3 * math.pi / 4 2.3561944901923448
Ainsi donc je ne suis pas fou. Au fond, c’est déjà ça… En réalité, ce qu’il se passe est que Python va définir un type par nombre et non pas un type global pour l’opération entière. Donc forcément, trois divisé par quatre sera arrondi à l’entier inférieur. D’ailleurs au passage, si l’arrondi était correct j’aurais eu tendance à expecter 1 plutôt que 0, mais bon passons. Le seul moyen d’éviter ça et de forcer le typage d’une façon ou d’une autre :
>>> 3./4 * math.pi 2.3561944901923448 >>> 3/float(4) * math.pi 2.3561944901923448
Après quelques recherches sur mon ami Google, il apparait que ce « problème » est connu et ne sera plus présent dans la version 3 de Python. Franchement, la prochaine fois, merci de préciser ce défaut d’implémentation en grosses capitales en pleins milieu du site officiel, ça m’évitera de perdre une heure à chercher pourquoi un algo plante.
(04.12.08) Edit : je confirme qu’avec la version 3 de Python fraichement sortie ce matin, le problème ne se pose plus.

Euh.
OKAY OUAIS.
Sinon tu veux quoi pour Noël ?
Ça.
Fais plutôt du Flash mec.
Ahah
Ahah, Non. Le jour où les sites en flash auront une utilité je m’y mettrais peut être. Et encore, va falloir qu’ils revoient l’ergonomie du soft à la louche parce que c’est vraiment de la merde…