2017-03-14 3 views
1

Ich erforsche das Konzept der Namespace in Python, und ich kann die folgende nicht erklären: builtins Nachladen nicht effektiv das Modul neu zu laden. Hier ein Beispiel:Nachladen builtins in 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') 

Wo mymodule einfach die Zuordnung enthält x = 5. Die Ausgabe lautet:

6 
5 
hello 
hello 

Vielleicht ist es eine Dummy-Frage, aber was ist der Grund für diese Art von Verhalten?

Antwort

2

Vom docs:

Es ist im Allgemeinen nicht sehr nützlich eingebaute oder dynamisch geladene Module zu laden. Nachladen sys, __main__, builtins und andere wichtige Module wird nicht empfohlen. In vielen Fällen Erweiterungsmodule werden nicht als einmal initialisiert werden mehr ausgelegt und kann in beliebiger Weise fehlschlagen, wenn neu geladen.