Site original : Sam & Max: Python, Django, Git et du cul
Ne pas utiliser l’opérateur splat dans un import, vous l’avez sans doute lu 100 fois, mais savez-vous pourquoi ?
Regardez la fonction open
:
>>> help(open) open(name[, mode[, buffering]]) -> file object Open a file using the file() type, returns a file object. This is the preferred way to open a file. See file.__doc__ for further information. (END)
Maintenant, si j’importe le module os
, ça ne change rien :
>>> import os >>> help(open) open(name[, mode[, buffering]]) -> file object Open a file using the file() type, returns a file object. This is the preferred way to open a file. See file.__doc__ for further information. (END)
Si par contre j’importe tout le contenu du module os
, sans namespace :
>>> from os import * >>> help(open) open(filename, flag [, mode=0777]) -> fd Open a file (for low level IO). (END)
La différence ?
Dans le premier cas, on a la fonction open()
built-in de Python. Dans le second cas, la fonction os.open()
a été importée et a remplacée la fonction open()
.
Ici le bug sera très difficile à trouver, car les deux fonctions ont presque la même signature :
open(name[, mode[, buffering]]) -> file object
VS
open(filename, flag [, mode=0777]) -> fd
Et en plus un usage très similaire.
Bottom line, import *
, c’est pour les sessions shell. Dans vos fichiers de code, ne l’utilisez pas, vous ne savez pas ce que vous importez.