2017-03-14 1 views
1

J'explore le concept d'espace de noms en Python et je ne peux pas expliquer ce qui suit: le rechargement builtins ne recharge pas efficacement le module. Voici un exemple:Rechargement de builtins en Python

import importlib as il 
import os 

import mymodule 
mymodule.x = 6 
print(mymodule.x) 
mymodule = il.reload(mymodule) 
print(mymodule.x) 


import builtins 
builtins.print = lambda x : os.system('echo hello') 
builtins.print('hi') 
builtins = il.reload(builtins) 
builtins.print('hi') 

Où mymodule contient simplement l'affectation x = 5. La sortie est:

6 
5 
hello 
hello 

Peut-être que c'est une question fictive, mais quelle est la raison de ce genre de comportement?

Répondre

2

De l'docs:

Il est généralement pas très utile de recharger intégrés ou modules chargés dynamiquement. Recharger sys, __main__, builtins et d'autres modules clés n'est pas recommandé. Dans de nombreux cas, les modules d'extension ne sont pas conçus pour être initialisés plus d'une fois et peuvent échouer de manière arbitraire lorsqu'ils sont rechargés.